<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>安艺云</title>
  <icon>https://www.gravatar.com/avatar/3a252b61111108e47f969aebf0a918f0</icon>
  <subtitle>天朗气清 惠风和畅</subtitle>
  <link href="https://blog.netreflix.com/atom.xml" rel="self"/>
  
  <link href="https://blog.netreflix.com/"/>
  <updated>2026-03-23T02:00:00.000Z</updated>
  <id>https://blog.netreflix.com/</id>
  
  <author>
    <name>安艺云</name>
    <email>Artreflix@outlook.com</email>
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>路灯</title>
    <link href="https://blog.netreflix.com/posts/3466344d.html"/>
    <id>https://blog.netreflix.com/posts/3466344d.html</id>
    <published>2026-03-23T02:00:00.000Z</published>
    <updated>2026-03-23T02:00:00.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="记忆里的光"><a href="#记忆里的光" class="headerlink" title=" 记忆里的光"></a><center> 记忆里的光</h2><p>小时候没有路灯，天色渐暗，依稀靠着微弱的日光走在回家的路上，倒是撑不太久，全靠着临近小路上家家户户的屋外的不算很亮，在现在来看算是伤眼的门前灯照着路。天将黑未黑，泛这蓝光时，家家户户错落有致，彼此间心照不宣开启门前的灯。</p><p>小时候从大道走进村里差不多够三人通行的小径，只在入口处没有人家住着，是暗的，越是远处，有一只孤零的灯挂在门头上，泛着黄，照着门前，散的光能照亮一小段的路，可惜走过后，那散的光就赶不上了。</p><p>只依稀再望远一点的地方，又是一只灯，同样的挂法，只是门开着，是个不算大的小卖部，能见着横着玻璃柜占据整个门框，时不时从里传来电视几句戏曲，人们几声谈笑。</p><p>走不一会儿，家门口也就到了。</p><h2 id="路灯初现"><a href="#路灯初现" class="headerlink" title=" 路灯初现"></a><center> 路灯初现</h2><p>后来倒是有了路灯，家家户户开前灯的习惯倒是没变，新路灯多在墙角，最多就照亮那一小块地方，从大路进到小路也就不用看远一点的灯作指引了。</p><p>天色暗沉下来，也顾不得路灯什么时候开了，只赶着在太阳落山前先去到小路上再说。路边零星杂草顶着不算平整的老式水泥砖，顶出了不少裂纹，藏在里面的蚂蚱和其他虫子趁着人还没走远就开始吱吱吱地乱叫，叫的人心烦。</p><p>不同于那些虫子，水渠里的青蛙还是蛤蟆的，都敢直接横在路中间，强势的要叫人等他过完再走。</p><p>天完全黑下来后，听着这些，就算是心情烦闷想着再吃点啥也要走相比之前好久的路才能到小卖部，而且还没什么新货，显得更烦了。路上除了这些虫子叫声，从转角处传来的电瓶车声倒是要大得很，时常混着后座中与孩子们的几句交谈声。</p><h2 id="现代的冷光"><a href="#现代的冷光" class="headerlink" title=" 现代的冷光"></a><center> 现代的冷光</h2><p>再后来，也就是现在了，国庆回去一趟，路灯也从原先的亮黄的白炽灯换成了冷白的LED，甚至于都有些嫌弃它过于亮了导致都没什么晚上的实感，冷白的光能把每块砖、每片瓦都照的清楚，也就自然不需要大家伙的门前灯助阵了。</p><p>倒是惊异于生态恢复还是其他，路边与小渠的杂草更多了，当然虫子也多，吵得耳朵压根听不见其他声音，同时伴着10月山区还没降温的湿热气候真是让人心情烦躁，甚至压过了快要到家的喜悦。</p><p>值得庆幸，原先小的必须礼让的回家之路，这次倒是畅通无阻。</p><p>临近家门，忽地从不远处传来尖锐的啼哭。</p>]]></content>
    
    
    <summary type="html">回忆</summary>
    
    
    
    <category term="生活日常" scheme="https://blog.netreflix.com/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%B8%B8/"/>
    
    
    <category term="回忆" scheme="https://blog.netreflix.com/tags/%E5%9B%9E%E5%BF%86/"/>
    
    <category term="路灯" scheme="https://blog.netreflix.com/tags/%E8%B7%AF%E7%81%AF/"/>
    
  </entry>
  
  <entry>
    <title>SpringBoot复习日记(一):Mybatis</title>
    <link href="https://blog.netreflix.com/posts/74545c96.html"/>
    <id>https://blog.netreflix.com/posts/74545c96.html</id>
    <published>2023-05-17T12:14:09.000Z</published>
    <updated>2023-05-17T13:00:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="MyBatis简介"><a href="#MyBatis简介" class="headerlink" title=" MyBatis简介"></a><center> MyBatis简介</h2><p>MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下， iBatis3.x正式更名为MyBatis。代码于<br>2013年11月迁移到Github。</p><p>iBatis一词来源于“internet”和“abatis”的组合，是一个基于Java的持久层框架。 iBatis提供的持久层框架，包括SQL Maps和Data Access Objects（DAO）。</p><h2 id="搭建MyBatis"><a href="#搭建MyBatis" class="headerlink" title=" 搭建MyBatis"></a><center> 搭建MyBatis</h2><h3 id="搭建开发环境"><a href="#搭建开发环境" class="headerlink" title="搭建开发环境"></a>搭建开发环境</h3><ul><li>IDE：idea 2019.2</li><li>构建工具：maven 3.5.4</li><li>MySQL版本：MySQL 8</li><li>MyBatis版本：MyBatis 3.5.7</li></ul><blockquote><p>MySQL不同版本的注意事项<br>1、驱动类driver-class-name<br>    MySQL 5版本使用jdbc5驱动，驱动类使用：<strong>com.mysql.jdbc.Driver</strong><br>    MySQL 8版本使用jdbc8驱动，驱动类使用：<strong>com.mysql.cj.jdbc.Driver</strong><br>2、连接地址url<br>    MySQL 5版本的url：<br>    <code>jdbc:mysql://localhost:3306/ssm</code><br>    MySQL 8版本的url：<br>    <code>jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC</code><br>    否则运行测试用例报告如下错误：<br>    java.sql.SQLException: The server time zone value ‘ÖÐ¹ú±ê×¼Ê±¼ä’ is unrecognized or represents more</p></blockquote><h3 id="创建maven工程"><a href="#创建maven工程" class="headerlink" title="创建maven工程"></a>创建maven工程</h3><p>在工程根目录下Pom.xml文件中添加以下内容：<br><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">dependencies</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- Mybatis核心 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>org.mybatis<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>mybatis<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">version</span>&gt;</span>3.5.7<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- junit测试 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>junit<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>junit<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">version</span>&gt;</span>4.12<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">scope</span>&gt;</span>test<span class="tag">&lt;/<span class="name">scope</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- MySQL驱动 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>mysql<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>mysql-connector-java<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">version</span>&gt;</span>8.0.16<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">dependencies</span>&gt;</span></span><br></pre></td></tr></table></figure></p><h3 id="创建MyBatis的核心配置文件"><a href="#创建MyBatis的核心配置文件" class="headerlink" title="创建MyBatis的核心配置文件"></a>创建MyBatis的核心配置文件</h3><blockquote><p>习惯上命名为mybatis-config.xml，这个文件名仅仅只是建议，并非强制要求。将来整合Spring之后，这个配置文件可以省略，所以大家操作时可以直接复制、粘贴。核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息核心配置文件存放的位置是src/main/resources目录下<br><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version=<span class="string">&quot;1.0&quot;</span> encoding=<span class="string">&quot;UTF-8&quot;</span> ?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">configuration</span></span></span><br><span class="line"><span class="meta">    <span class="keyword">PUBLIC</span> <span class="string">&quot;-//mybatis.org//DTD Config 3.0//EN&quot;</span></span></span><br><span class="line"><span class="meta">    <span class="string">&quot;http://mybatis.org/dtd/mybatis-3-config.dtd&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">configuration</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!--设置连接数据库的环境--&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">environments</span> <span class="attr">default</span>=<span class="string">&quot;development&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">environment</span> <span class="attr">id</span>=<span class="string">&quot;development&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">transactionManager</span> <span class="attr">type</span>=<span class="string">&quot;JDBC&quot;</span>/&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">dataSource</span> <span class="attr">type</span>=<span class="string">&quot;POOLED&quot;</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;driver&quot;</span> <span class="attr">value</span>=<span class="string">&quot;com.mysql.cj.jdbc.Driver&quot;</span>/&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;url&quot;</span> <span class="attr">value</span>=<span class="string">&quot;jdbc:mysql://localhost:3306/ssm?</span></span></span><br><span class="line"><span class="string"><span class="tag">                serverTimezone=UTC&quot;</span>/&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;username&quot;</span> <span class="attr">value</span>=<span class="string">&quot;root&quot;</span>/&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;password&quot;</span> <span class="attr">value</span>=<span class="string">&quot;123456&quot;</span>/&gt;</span></span><br><span class="line">            <span class="tag">&lt;/<span class="name">dataSource</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">environment</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">environments</span>&gt;</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment">&lt;!--引入映射文件--&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">mappers</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">package</span> <span class="attr">name</span>=<span class="string">&quot;mappers/UserMapper.xml&quot;</span>/&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">mappers</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">configuration</span>&gt;</span></span><br></pre></td></tr></table></figure></p><h3 id="创建Mapper接口"><a href="#创建Mapper接口" class="headerlink" title="创建Mapper接口"></a>创建Mapper接口</h3><p>MyBatis中的mapper接口相当于以前的dao。但是区别在于，mapper仅仅是接口，我们不需要提供实现类。<br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="title class_">UserMapper</span> &#123;</span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">    * 添加用户信息</span></span><br><span class="line"><span class="comment">    */</span></span><br><span class="line">    <span class="type">int</span> <span class="title function_">insertUser</span><span class="params">()</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p></blockquote><h3 id="创建MyBatis的映射文件"><a href="#创建MyBatis的映射文件" class="headerlink" title="创建MyBatis的映射文件"></a>创建MyBatis的映射文件</h3><p>相关概念：ORM（Object Relationship Mapping）对象关系映射。</p><ul><li>对象：Java的实体类对象</li><li>关系：关系型数据库</li><li>映射：二者之间的对应关系</li></ul><table>    <thead>        <tr>            <th>Java概念</th>            <th>数据库概念</th>        </tr>    </thead>    <tbody>        <tr>            <td align=center>类</td>            <td align=center>表</td>        </tr>        <tr>            <td align=center>属性</td>            <td align=center>字段/列</td>        </tr>        <tr>            <td align=center>对象</td>            <td align=center>记录/行</td>        </tr>    </tbody></table><blockquote><p>1、映射文件的命名规则：<br>    表所对应的实体类的类名+Mapper.xml<br>    例如：表t_user，映射的实体类为User，所对应的映射文件为UserMapper.xml<br>    因此一个映射文件对应一个实体类，对应一张表的操作<br>    MyBatis映射文件用于编写SQL，访问以及操作表中的数据<br>    MyBatis映射文件存放的位置是src/main/resources/mappers目录下<br>2、 MyBatis中可以面向接口操作数据，要保证两个一致：<br>    a&gt;mapper接口的全类名和映射文件的命名空间（namespace）保持一致<br>    b&gt;mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致</p></blockquote><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version=<span class="string">&quot;1.0&quot;</span> encoding=<span class="string">&quot;UTF-8&quot;</span> ?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">mapper</span></span></span><br><span class="line"><span class="meta">    <span class="keyword">PUBLIC</span> <span class="string">&quot;-//mybatis.org//DTD Mapper 3.0//EN&quot;</span></span></span><br><span class="line"><span class="meta">    <span class="string">&quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">mapper</span> <span class="attr">namespace</span>=<span class="string">&quot;&quot;</span><span class="attr">项目文件夹</span>&quot;<span class="attr">.mybatis.mapper.UserMapper</span>&quot;&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!--int insertUser();--&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">insert</span> <span class="attr">id</span>=<span class="string">&quot;insertUser&quot;</span>&gt;</span></span><br><span class="line">        insert into t_user values(null,&#x27;admin&#x27;,&#x27;123456&#x27;,23,&#x27;男&#x27;,&#x27;12345@qq.com&#x27;)</span><br><span class="line">    <span class="tag">&lt;/<span class="name">insert</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;/<span class="name">mapper</span>&gt;</span></span><br></pre></td></tr></table></figure><h3 id="加入log4j日志功能"><a href="#加入log4j日志功能" class="headerlink" title="加入log4j日志功能"></a>加入log4j日志功能</h3><h4 id="在Pom-xml加入依赖"><a href="#在Pom-xml加入依赖" class="headerlink" title="在Pom.xml加入依赖"></a>在Pom.xml加入依赖</h4><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">&lt;!-- log4j日志 --&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>log4j<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>log4j<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">version</span>&gt;</span>1.2.17<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br></pre></td></tr></table></figure><h4 id="加入log4j的配置文件"><a href="#加入log4j的配置文件" class="headerlink" title="加入log4j的配置文件"></a>加入log4j的配置文件</h4><blockquote><p>log4j的配置文件名为log4j.xml，存放的位置是src/main/resources目录下</p></blockquote><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version=<span class="string">&quot;1.0&quot;</span> encoding=<span class="string">&quot;UTF-8&quot;</span> ?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">log4j</span>:configuration <span class="keyword">SYSTEM</span> <span class="string">&quot;log4j.dtd&quot;</span>&gt;</span></span><br><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">log4j:configuration</span> <span class="attr">xmlns:log4j</span>=<span class="string">&quot;http://jakarta.apache.org/log4j/&quot;</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;<span class="name">appender</span> <span class="attr">name</span>=<span class="string">&quot;STDOUT&quot;</span> <span class="attr">class</span>=<span class="string">&quot;org.apache.log4j.ConsoleAppender&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">param</span> <span class="attr">name</span>=<span class="string">&quot;Encoding&quot;</span> <span class="attr">value</span>=<span class="string">&quot;UTF-8&quot;</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">layout</span> <span class="attr">class</span>=<span class="string">&quot;org.apache.log4j.PatternLayout&quot;</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">param</span> <span class="attr">name</span>=<span class="string">&quot;ConversionPattern&quot;</span> <span class="attr">value</span>=<span class="string">&quot;%-5p %d&#123;MM-dd HH:mm:ss,SSS&#125;%m (%F:%L) \n&quot;</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">layout</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">appender</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">logger</span> <span class="attr">name</span>=<span class="string">&quot;java.sql&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">level</span> <span class="attr">value</span>=<span class="string">&quot;debug&quot;</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">logger</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">logger</span> <span class="attr">name</span>=<span class="string">&quot;org.apache.ibatis&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">level</span> <span class="attr">value</span>=<span class="string">&quot;info&quot;</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">logger</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">root</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">level</span> <span class="attr">value</span>=<span class="string">&quot;debug&quot;</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">appender-ref</span> <span class="attr">ref</span>=<span class="string">&quot;STDOUT&quot;</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">root</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">log4j:configuration</span>&gt;</span></span><br></pre></td></tr></table></figure><blockquote><p>日志的级别：FATAL(致命)&gt;ERROR(错误)&gt;WARN(警告)&gt;INFO(信息)&gt;DEBUG(调试),从左到右打印的内容越来越详细</p></blockquote><h2 id="核心配置文件详解"><a href="#核心配置文件详解" class="headerlink" title=" 核心配置文件详解"></a><center> 核心配置文件详解</h2><blockquote><p>核心配置文件中的标签必须按照固定的顺序：<br>    properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,refl<br>    ectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?</p></blockquote><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version=<span class="string">&quot;1.0&quot;</span> encoding=<span class="string">&quot;UTF-8&quot;</span> ?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">configuration</span></span></span><br><span class="line"><span class="meta">    <span class="keyword">PUBLIC</span> <span class="string">&quot;-//mybatis.org//DTD Config 3.0//EN&quot;</span></span></span><br><span class="line"><span class="meta">    <span class="string">&quot;http://mybatis.org/dtd/mybatis-3-config.dtd&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">configuration</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">    MyBatis核心配置文件中，标签的顺序：</span></span><br><span class="line"><span class="comment">    properties?,settings?,typeAliases?,typeHandlers?,</span></span><br><span class="line"><span class="comment">    objectFactory?,objectWrapperFactory?,reflectorFactory?,</span></span><br><span class="line"><span class="comment">    plugins?,environments?,databaseIdProvider?,mappers?</span></span><br><span class="line"><span class="comment">    --&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!--引入properties文件--&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">properties</span> <span class="attr">resource</span>=<span class="string">&quot;jdbc.properties&quot;</span> /&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!--设置类型别名--&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">typeAliases</span>&gt;</span></span><br><span class="line">        <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">            typeAlias：设置某个类型的别名</span></span><br><span class="line"><span class="comment">            属性：</span></span><br><span class="line"><span class="comment">                type：设置需要设置别名的类型</span></span><br><span class="line"><span class="comment">                alias：设置某个类型的别名，若不设置该属性，那么该类型拥有默认的别名，即类名</span></span><br><span class="line"><span class="comment">        且不区分大小写</span></span><br><span class="line"><span class="comment">        --&gt;</span></span><br><span class="line">        <span class="comment">&lt;!--&lt;typeAlias type=&quot;&quot;项目文件&quot;.mybatis.pojo.User&quot;&gt;&lt;/typeAlias&gt;--&gt;</span></span><br><span class="line">        <span class="comment">&lt;!--以包为单位，将包下所有的类型设置默认的类型别名，即类名且不区分大小写--&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">package</span> <span class="attr">name</span>=<span class="string">&quot;&quot;</span><span class="attr">项目文件</span>&quot;<span class="attr">.mybatis.pojo</span>&quot;/&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">typeAliases</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">        environments：配置多个连接数据库的环境</span></span><br><span class="line"><span class="comment">        属性：</span></span><br><span class="line"><span class="comment">            default：设置默认使用的环境的id</span></span><br><span class="line"><span class="comment">    --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">environments</span> <span class="attr">default</span>=<span class="string">&quot;development&quot;</span>&gt;</span></span><br><span class="line">        <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">            environment：配置某个具体的环境</span></span><br><span class="line"><span class="comment">            属性：</span></span><br><span class="line"><span class="comment">                id：表示连接数据库的环境的唯一标识，不能重复</span></span><br><span class="line"><span class="comment">        --&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">environment</span> <span class="attr">id</span>=<span class="string">&quot;development&quot;</span>&gt;</span></span><br><span class="line">            <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">                transactionManager：设置事务管理方式</span></span><br><span class="line"><span class="comment">                属性：</span></span><br><span class="line"><span class="comment">                    type=&quot;JDBC|MANAGED&quot;</span></span><br><span class="line"><span class="comment">                    JDBC：表示当前环境中，执行SQL时，使用的是JDBC中原生的事务管理方式，事</span></span><br><span class="line"><span class="comment">            务的提交或回滚需要手动处理</span></span><br><span class="line"><span class="comment">                    MANAGED：被管理，例如Spring</span></span><br><span class="line"><span class="comment">            --&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">transactionManager</span> <span class="attr">type</span>=<span class="string">&quot;JDBC&quot;</span>/&gt;</span></span><br><span class="line">            <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">                dataSource：配置数据源</span></span><br><span class="line"><span class="comment">                属性：</span></span><br><span class="line"><span class="comment">                    type：设置数据源的类型</span></span><br><span class="line"><span class="comment">                    type=&quot;POOLED|UNPOOLED|JNDI&quot;</span></span><br><span class="line"><span class="comment">                    POOLED：表示使用数据库连接池缓存数据库连接</span></span><br><span class="line"><span class="comment">                    UNPOOLED：表示不使用数据库连接池</span></span><br><span class="line"><span class="comment">                    JNDI：表示使用上下文中的数据源</span></span><br><span class="line"><span class="comment">            --&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">dataSource</span> <span class="attr">type</span>=<span class="string">&quot;POOLED&quot;</span>&gt;</span></span><br><span class="line">                <span class="comment">&lt;!--设置连接数据库的驱动--&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;driver&quot;</span> <span class="attr">value</span>=<span class="string">&quot;$&#123;jdbc.driver&#125;&quot;</span>/&gt;</span></span><br><span class="line">                <span class="comment">&lt;!--设置连接数据库的连接地址--&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;url&quot;</span> <span class="attr">value</span>=<span class="string">&quot;$&#123;jdbc.url&#125;&quot;</span>/&gt;</span></span><br><span class="line">                <span class="comment">&lt;!--设置连接数据库的用户名--&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;username&quot;</span> <span class="attr">value</span>=<span class="string">&quot;$&#123;jdbc.username&#125;&quot;</span>/&gt;</span></span><br><span class="line">                <span class="comment">&lt;!--设置连接数据库的密码--&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;password&quot;</span> <span class="attr">value</span>=<span class="string">&quot;$&#123;jdbc.password&#125;&quot;</span>/&gt;</span></span><br><span class="line">            <span class="tag">&lt;/<span class="name">dataSource</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">environment</span>&gt;</span></span><br><span class="line"></span><br><span class="line">        <span class="tag">&lt;<span class="name">environment</span> <span class="attr">id</span>=<span class="string">&quot;test&quot;</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">transactionManager</span> <span class="attr">type</span>=<span class="string">&quot;JDBC&quot;</span>/&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">dataSource</span> <span class="attr">type</span>=<span class="string">&quot;POOLED&quot;</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;driver&quot;</span> <span class="attr">value</span>=<span class="string">&quot;com.mysql.cj.jdbc.Driver&quot;</span>/&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;url&quot;</span> <span class="attr">value</span>=<span class="string">&quot;jdbc:mysql://localhost:3306/ssmserverTimezone=UTC&quot;</span>/&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;username&quot;</span> <span class="attr">value</span>=<span class="string">&quot;root&quot;</span>/&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">property</span> <span class="attr">name</span>=<span class="string">&quot;password&quot;</span> <span class="attr">value</span>=<span class="string">&quot;123456&quot;</span>/&gt;</span></span><br><span class="line">            <span class="tag">&lt;/<span class="name">dataSource</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">environment</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">environments</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!--引入映射文件--&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">mappers</span>&gt;</span></span><br><span class="line">        <span class="comment">&lt;!--&lt;mapper resource=&quot;mappers/UserMapper.xml&quot;/&gt;--&gt;</span></span><br><span class="line">        <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">        以包为单位引入映射文件</span></span><br><span class="line"><span class="comment">        要求：</span></span><br><span class="line"><span class="comment">        1、mapper接口所在的包要和映射文件所在的包一致</span></span><br><span class="line"><span class="comment">        2、mapper接口要和映射文件的名字一致</span></span><br><span class="line"><span class="comment">        --&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">package</span> <span class="attr">name</span>=<span class="string">&quot;&quot;</span><span class="attr">项目文件</span>&quot;<span class="attr">.mybatis.mapper</span>&quot;/&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">mappers</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">configuration</span>&gt;</span></span><br></pre></td></tr></table></figure><div class="tip warning faa-horizontal animated"><p>具体配置信息还是根据具体项目自行删改！</p></div>]]></content>
    
    
    <summary type="html">我的SpringBoot复习日记</summary>
    
    
    
    <category term="后端" scheme="https://blog.netreflix.com/categories/%E5%90%8E%E7%AB%AF/"/>
    
    
    <category term="SpringBoot" scheme="https://blog.netreflix.com/tags/SpringBoot/"/>
    
    <category term="Mybatis" scheme="https://blog.netreflix.com/tags/Mybatis/"/>
    
  </entry>
  
  <entry>
    <title>CSGO社区服务器搭建指南(一)</title>
    <link href="https://blog.netreflix.com/posts/9daba997.html"/>
    <id>https://blog.netreflix.com/posts/9daba997.html</id>
    <published>2022-10-17T15:29:35.000Z</published>
    <updated>2022-10-20T10:00:41.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="写在前面"><a href="#写在前面" class="headerlink" title=" 写在前面"></a><center> 写在前面</h2><p>&ensp;&ensp;&ensp;&ensp;本文章开始之前就先默认了你了解Linux基础命令、VPS的连接和配置、网络端口的配置等等。如果你是个萌新小白的话的话，建议先学习一点基础命令和VPS的配置，在下面也会提及一小部分，本次我将要使用CentOS系统进行配置。那么，就开始从零开始搭建吧。</p><h2 id="服务器配置以及CSGO本体下载"><a href="#服务器配置以及CSGO本体下载" class="headerlink" title="服务器配置以及CSGO本体下载"></a><center>服务器配置以及CSGO本体下载</h2><h3 id="创建新用户"><a href="#创建新用户" class="headerlink" title="创建新用户"></a>创建新用户</h3><div class="tip warning faa-horizontal animated"><p>Red Hat目前已经停止对CentOS8的稳定更新，所以我们选择CentOS7来进行配置</p></div><p>首先对于Linux来说，一般VPS的CentOS的初始用户都是root，对于我们来说权限太大，所以我们需要新建一个用户来完成我们之后的操作。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">useradd -m steam</span><br><span class="line"><span class="built_in">cd</span> /home/steam</span><br></pre></td></tr></table></figure><blockquote><p>我创建的用户名是<mark class="hl-label orange">steam</mark> ，当然你也可以用别的名字来代替。<mark class="hl-label green">cd</mark> 命令是指定到某个目录，新建“steam”用户之后就会在<mark class="hl-label pink">/home</mark> 文件夹下新建steam文件夹，所以我选定的是根目录下的<mark class="hl-label pink">/home/steam/</mark> 文件夹，当然你也可以选择别的目录。如果你对此没有印象的话，你可以去看看Linux系统的文件架构。</p></blockquote><h3 id="安装依赖文件"><a href="#安装依赖文件" class="headerlink" title="安装依赖文件"></a>安装依赖文件</h3><p>完成上述操作之后，我们就要开始进行系统软件的更新，以便于我们的依赖软件和系统软件保持在最新的状态，防止最后运行时报错。</p><div class="tip warning faa-horizontal animated"><p>由于CentOS8已经宣布停止稳定版转向Stream滚动发行版，所以使用CentOS8更新软件可能会变得不稳定</p></div><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yum update -y &amp;&amp; yum upgrade -y &amp;&amp; yum install glibc.i686 libstdc++.i686 -y &amp;&amp; yum install zlib.i686 -y </span><br></pre></td></tr></table></figure><blockquote><p><mark class="hl-label green">yum&ensp;update</mark> 、<mark class="hl-label green">yum&ensp;upgrade</mark> 就是CentOS的升级命令，“-y”的意思就是在接下来的问询中，比如当问你“确定要升级软件吗”之类的问题时，将自动默认为‘确定’然后不间断运行直到命令结束。而<mark class="hl-label green">yum</mark> 就是系统的软件包管理器，以后系统内的各种软件和依赖，你只需要敲命令的时候开始加上yum就可以安装和删除各种包。<mark class="hl-label orange">yum&ensp;install</mark> 就是系统的安装命令，glibc.i686、libstdc++.i686和zlib.i686就是我们需要安装的依赖软件。</p></blockquote><h3 id="安装Steam和Screen"><a href="#安装Steam和Screen" class="headerlink" title="安装Steam和Screen"></a>安装Steam和Screen</h3><p>完成上述操作之后，我们将要下载在Linux上运行的steam服务端版，也就是命令行版，还有就是后台运行CSGO。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz &amp;&amp; tar xf steamcmd_linux.tar.gz &amp;&amp; yum clean all &amp;&amp; yum install screen -y &amp;&amp; <span class="built_in">chown</span> -R steam /home/steam/ </span><br></pre></td></tr></table></figure><blockquote><p><mark class="hl-label green">wget</mark> 命令就是是远程拉取一个包含<mark class="hl-label blue">steam</mark> 命令行版的压缩包，<mark class="hl-label green">tar</mark> 命令就是对拉取的文件进行解压，<mark class="hl-label green">yum&ensp;clean&ensp;all</mark> 命令是清除升级时候的缓存，<mark class="hl-label green">chown</mark> 命令是在给<mark class="hl-label orange">steam</mark> 用户取得在<mark class="hl-label pink">/home/steam/</mark> 文件夹下所有文件的读写权限，因为我们创建了新用户但是没有切换至新用户，现在的操作都处于root账户状态，所以下载的文件所有权是属于root的，我们要将权限扩展到steam这个用户。此外还需要安装一个保持CSGO后台留存的软件-‘Screen’。</p></blockquote><h3 id="切换用户"><a href="#切换用户" class="headerlink" title="切换用户"></a>切换用户</h3><p>上一步完成之后，你就会发现在<mark class="hl-label pink">/home/steam/</mark> 下出现了一个<code>steamcmd.sh</code>的文件，接下来就将要使用这个命令行版下载CSGO。</p><p>不过我们首先要切换一下用户，从高权限的root切换成新用户<mark class="hl-label orange">steam</mark> 。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">su steam</span><br></pre></td></tr></table></figure><p>接下来设置steam这个用户的密码</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">passwd</span><br></pre></td></tr></table></figure><p>你的终端命令行它就会显示：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Changing password <span class="keyword">for</span> user steam.</span><br><span class="line">Current password:</span><br></pre></td></tr></table></figure><p>第二句冒号后面就是设置密码，要输两遍，不过密码他是不会明文显示的所以设置的时候小心一点。 </p><h3 id="运行steam下载CSGO"><a href="#运行steam下载CSGO" class="headerlink" title="运行steam下载CSGO"></a>运行steam下载CSGO</h3><p>完成上一步后，我们从root切换至steam用户，接下来就要开始下载CSGO</p><p>运行steam命令行：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./steamcmd.sh</span><br></pre></td></tr></table></figure></p><p>当滚动了很多行代码之后，你就会看见这样一段代码：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[  0%] Checking <span class="keyword">for</span> available updates...</span><br><span class="line">[----] Verifying installation...</span><br><span class="line">Steam Console Client (c) Valve Corporation</span><br><span class="line">-- <span class="built_in">type</span> <span class="string">&#x27;quit&#x27;</span> to <span class="built_in">exit</span> --</span><br><span class="line">Loading Steam API...Warning: failed to init SDL thread priority manager: SDL not found</span><br><span class="line">OK.</span><br><span class="line">Steam&gt;</span><br></pre></td></tr></table></figure></p><p>出现<code>Steam&gt;</code>就表示可以输入相应的指令，紧接着请一行一行地输入下列的命令，一定要上一次命令完成后输入下一条命令：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">force_install_dir ./csgo/</span><br><span class="line">login anonymous</span><br><span class="line">app_update 740 validate</span><br><span class="line">quit</span><br></pre></td></tr></table></figure><br>以下是上面的命令解释：<br><div class="tabs" id="1"><ul class="nav-tabs"><li class="tab active"><button type="button" data-href="#1-1">第一行</button></li><li class="tab"><button type="button" data-href="#1-2">第二行</button></li><li class="tab"><button type="button" data-href="#1-3">第三行</button></li><li class="tab"><button type="button" data-href="#1-4">第四行</button></li></ul><div class="tab-contents"><div class="tab-item-content active" id="1-1"><p><strong><code>force_install_dir ./csgo/</code>表示在‘/home/steam/’下新建一个叫csgo的文件夹，这就是csgo服务器文件的存放地</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-2"><p><strong><code>login anonymous</code>表示用匿名方式登陆到steam的服务器，当然你也可以用自己的steam账号，但是需要输入密码，后续更新也会比较麻烦</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-3"><p><strong><code>app_update 740 validate</code>表示下载CSGO的服务器文件，740就是CSGO服务器的代号，validate就是下载验证，后续更新也可以删除这一词</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-4"><p><strong><code>quit</code>这个就很好理解了，就是退出steam命令行</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div></p><p>等煮个咖啡的功夫，CSGO就在你的服务器上安装完毕了。</p><h3 id="配置CSGO服务器"><a href="#配置CSGO服务器" class="headerlink" title="配置CSGO服务器"></a>配置CSGO服务器</h3><h4 id="申请GLST"><a href="#申请GLST" class="headerlink" title="申请GLST"></a>申请GLST</h4><p>首先需要向V社申请开设社区服务器的GSLT许可用于开服:</p><p>打开<code>https://steamcommunity.com/dev/managegameservers</code>，如果不能访问Steam社区请使用steamcommunity 302，</p><div class="img-wrap"><div class="img-bg"><img class="img" src="https://img01.anheyu.com/useruploads/135/2023/04/16/643b7f7942305.png"/></div></div><blockquote><p>请记住你的令牌，且妥善保管，一台服务器只能使用一个唯一的令牌，再开其他服务器需要再次生成，注意这个令牌代表着你的开服账号，如果你服务器违反了CSGO社区服务器守则，你的开服账号将遭到连带封禁，我见过的是30天封禁而且是红信，虽然不是我，但是一定要重视，如果你想要安装违规插件，请使用小号生成令牌。 </p></blockquote><h4 id="配置服务器server-cfg"><a href="#配置服务器server-cfg" class="headerlink" title="配置服务器server.cfg"></a>配置服务器server.cfg</h4><p>完成这些之后就需要用你刚刚申请的GLST来配置你的server.cfg</p><p>进入/home/steam/csgo/csgo/cfg下打开或新建文件server.cfg，或者你也可以：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /home/steam/csgo/csgo/cfg</span><br></pre></td></tr></table></figure><br>输入以下内容(//后内容为本行注释，非指令内容，可以去掉):<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">hostname <span class="string">&quot;My CSGO Server&quot;</span>  //设置服务器名称，暂不支持中文（需要插件）</span><br><span class="line">rcon_password <span class="string">&quot;SBDXCNMB&quot;</span> //rcon密码，用于远程连接此CSGO服务器控制台的密码</span><br><span class="line">sv_password <span class="string">&quot;SBSB&quot;</span> //服务器密码（可留空即为公开）</span><br><span class="line">sv_tags <span class="string">&quot;retakes,pratice,PCG&quot;</span> //服务器标签（国际服社区服浏览器可以看到），可自定，用英文逗号隔开</span><br><span class="line">host_info_show 2 //服务器信息展示 0即不展示 1一般信息 2尽可能多 可自定</span><br><span class="line">host_players_show 2 //服务器人数展示 0不显示 1只显示人数不显示玩家 2即显示人数和在线玩家</span><br><span class="line">sv_setsteamaccount XXXXXXXXXXXXXXXXXXXX //填入上面申请的GLST令牌，每个服只能用一个</span><br><span class="line"><span class="built_in">exec</span> banned_user.cfg //读取封禁名单</span><br><span class="line"><span class="built_in">exec</span> banned_ip.cfg //读取封禁IP</span><br><span class="line">writeid</span><br><span class="line">writeip</span><br><span class="line">sv_region 4 //服务器区域：亚洲 </span><br></pre></td></tr></table></figure><br>最基础的CSGO社区服务器配置已经完成，然后保存即可，</p><h3 id="启动服务器与调试"><a href="#启动服务器与调试" class="headerlink" title="启动服务器与调试"></a>启动服务器与调试</h3><p>现在我就可以准备启动服务器了，命令行输入：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">screen -S csgo</span><br></pre></td></tr></table></figure><br>这里的操作是使用screen命令使我们新建一个名叫csgo的窗口，立刻理解成Win10的Win+Tab虚拟桌面，这样一会我们退出时，你的CSGO服务器也会在运行。 </p><p>然后进入到CSGO目录下：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /home/steam/csgo/</span><br></pre></td></tr></table></figure></p><p>在终端下输入一下命令：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./srcds_run -game csgo -tickrate 128 -console -usercon +game_type 0 +game_mode 1 +mapgroup mg_active +map de_mirage -maxplayers_override 9</span><br></pre></td></tr></table></figure></p><blockquote><p>我们来一部分一部分解释，首先./srcds_run代表开始运行，后面的都属于启动项，这个srcds就是Source Dedicated Server（起源引擎独立服务器）的意思，+maxplayers_override这个不用说，就是限制服务器人数的。<br><div class="tabs" id="1"><ul class="nav-tabs"><li class="tab active"><button type="button" data-href="#1-1">-game csgo</button></li><li class="tab"><button type="button" data-href="#1-2">-tickrate 128</button></li><li class="tab"><button type="button" data-href="#1-3">-conselo</button></li><li class="tab"><button type="button" data-href="#1-4">-usercon</button></li><li class="tab"><button type="button" data-href="#1-5">-game_type\-game_mode</button></li><li class="tab"><button type="button" data-href="#1-6">-mapgroup</button></li></ul><div class="tab-contents"><div class="tab-item-content active" id="1-1"><p><strong>表示告诉起源引擎服务器，这个游戏是<code>CSGO</code></strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-2"><p><strong>这个不用说，表示服务器启动要以128tick模式启动</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-3"><p><strong>启用控制台输入，可远程接收命令</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-4"><p><strong>允许拥有rcon密码的人进行远程管理</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-5"><p><strong>表示游戏模式<br>1.休闲模式&ensp;&ensp;&ensp;&ensp;+game_type 0 +game_mode 0<br>2.军备竞赛&ensp;&ensp;&ensp;&ensp;+game_type 1 +game_mode 0<br>3.爆破模式&ensp;&ensp;&ensp;&ensp;+game_type 1 +game_mode 1<br>4.死亡竞赛&ensp;&ensp;&ensp;&ensp;+game_type 1 +game_mode 2<br>更多模式请参阅/csgo/gamemodes.txt</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-6"><p><strong>mg_active表示地图组， +map de_mirage表示地图组启动的第一张图是mirage<br>所有地图组<br>mg_bomb拆除地图组：<br>mg_hostage人质解救地图组<br>mg_lowgravity低重力地图组<br>mg_demolition爆破地图组<br>mg_armsrace军备竞赛地图组<br>mg_casualdelta炸弹拆除地图组 II 号<br>mg_casualsigma炸弹拆除地图组 I 号<br>mg_reserves后备生涯地图组<br>mg_deathmatch经典地图组<br>mg_skirmish_stabstabzap戳戳乐<br>mg_skirmish_flyingscoutsman跳狙飞人<br>mg_skirmish_triggerdiscipline弹无虚发<br>mg_skirmish_headshots砰！爆头！<br>mg_skirmish_huntergatherers采猎者<br>mg_skirmish_heavyassaultsuit重型突击套装<br>mg_skirmish_armsrace军备竞赛(战争游戏)<br>mg_skirmish_demolition爆破模式(战争游戏)<br>请参阅 /csgo/gamemodes.txt 文件以了解或编辑地图组中相应地图</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div></p></blockquote><p>然后会滚一堆屏，等到屏幕上出现：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">Connection to Steam servers successful.</span><br><span class="line">  Public IP is 233.233.233.2333.</span><br><span class="line">Assigned persistent gameserver Steam ID [G:1:666666666].</span><br><span class="line">Gameserver logged on to Steam, assigned identity steamid:666666666666666666666666</span><br><span class="line">Set SteamNetworkingSockets P2P_STUN_ServerList to <span class="string">&#x27;x.x.x.x:3478&#x27;</span> as per SteamNetworkingSocketsSerialized</span><br><span class="line">VAC secure mode is activated.</span><br><span class="line">GC Connection established <span class="keyword">for</span> server version 1175, instance idx 1</span><br></pre></td></tr></table></figure></p><blockquote><p>这就表示CSGO服务器已经启动成功了，接下来你只需要在CSGO游戏端控制台输入connect x.x.x.x(你的IP）并回车就可以连接到服务器了，如果你的服务器设置了密码，则需要再这之前输入password xxxxxx（你的密码）即可，国际服可以用社区服浏览器搜索连接。如果要向服务器发送指令的话，在控制台输入rcon_password xxxxxx(你的密码),然后rcon+(你的命令)即可，使用时去掉加号，注意空格。<br><div class="tip warning faa-horizontal animated"><p>如果你发现用自己VPS的IP地址链接不进去的话，记得要开放你在VPS和宝塔面板上的27015TCP/UDP端口。</p></div></p></blockquote><h2 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h2><p>到现在为止所配置的CSGO服务器的功能还很原始，下一期我们会讲一讲如何在服务器上安装SourceMod和MetaMod，讲一讲如何使用插件。</p><h2 id="参考资料："><a href="#参考资料：" class="headerlink" title="参考资料："></a>参考资料：</h2><ul><li>Valve开发社区wiki（英文，仅部分有翻译）</li><li>Source Dedicated Server <a href="https://developer.valvesoftware.com/wiki/Source_Dedicated_Server">https://developer.valvesoftware.com/wiki/Source_Dedicated_Server</a> </li><li><a href="https://www.bilibili.com/read/cv7155530?spm_id_from=333.999.0.0">https://www.bilibili.com/read/cv7155530?spm_id_from=333.999.0.0</a> author: Royz_</li><li>Counter-Strike: Global Offensive Dedicated Servers <a href="https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive_Dedicated_Servers">https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive_Dedicated_Servers</a></li></ul>]]></content>
    
    
    <summary type="html">CSGO服务器搭建</summary>
    
    
    
    <category term="服务器搭建指南" scheme="https://blog.netreflix.com/categories/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/"/>
    
    
    <category term="CSGO社区服务器" scheme="https://blog.netreflix.com/tags/CSGO%E7%A4%BE%E5%8C%BA%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    
    <category term="Linux" scheme="https://blog.netreflix.com/tags/Linux/"/>
    
  </entry>
  
  <entry>
    <title>Express框架简单入门</title>
    <link href="https://blog.netreflix.com/posts/980297d6.html"/>
    <id>https://blog.netreflix.com/posts/980297d6.html</id>
    <published>2022-10-17T15:29:35.000Z</published>
    <updated>2026-03-29T02:56:29.706Z</updated>
    
    <content type="html"><![CDATA[<h2 id="写在前面"><a href="#写在前面" class="headerlink" title=" 写在前面"></a><center> 写在前面</h2><p>&ensp;&ensp;&ensp;&ensp;本文章仅仅涉及到基本的NodeJS语法、Express.JS简单操作数据库和基础的网站api编写。此外，我已经默认了你掌握mysql语法和简单的js代码。并且在实际项目开发过程中很少会使用这种简单的形式去构建，仅仅是作为入门的基础，自己玩玩可以，实际的承载量不太高。</p><h2 id="Express-框架使用指南"><a href="#Express-框架使用指南" class="headerlink" title=" Express 框架使用指南"></a><center> Express 框架使用指南</h2><h3 id="安装NodeJS与NPM包管理器"><a href="#安装NodeJS与NPM包管理器" class="headerlink" title="安装NodeJS与NPM包管理器"></a>安装NodeJS与NPM包管理器</h3><p>首先需要说明的是，Express框架是依托于Nodejs构建而来的，是作为其中的插件而存在的，要想使用插件的话，需要安装<code>NPM包管理器</code>，但是放心，Nodejs里面已经包含了NPM包管理器。打开<code>https://nodejs.org/en/download/</code>以下载你所需要的版本并安装。</p><h3 id="安装Mysql与Express-js"><a href="#安装Mysql与Express-js" class="headerlink" title="安装Mysql与Express.js"></a>安装Mysql与Express.js</h3><div class="tip warning faa-horizontal animated"><p>请在任意位置创建文件夹并打开终端！</p></div><p>安装Nodejs完成之后，你的终端里就会出现<code>NPM</code>这个全局命令，所有在前端开发和Nodejs后端所需要的插件和框架都需要使用<code>NPM包管理器</code>，相当于Java中的Maven管理器，所以请使用下述命令安装Mysql和Express框架：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npm install mysql</span><br><span class="line">npm install express</span><br></pre></td></tr></table></figure><blockquote><p>安装命令跑完之后你的文件夹里就会出现<code>node_modules</code>、<code>package.json</code>、<code>package-lock.json</code>，其中第一个是刚刚下载安装的Mysql数据库插件和Express框架插件存放的文件夹，你可以打开看看其文件结构，剩下的第二和第三是版本管理相关的文件，确定项目所需要插件的具体版本，防止冲突，一般情况下我们可以忽视。</p></blockquote><h3 id="引入插件"><a href="#引入插件" class="headerlink" title="引入插件"></a>引入插件</h3><div class="tip success"><p>安装完成之后就可以开始正式开始编写代码了</p></div><p>在跟<code>node_modules</code>同级的目录下，新建app.js首先引入Mysql和Express：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 导入mysql模块</span></span><br><span class="line"><span class="keyword">var</span> mysql = <span class="built_in">require</span>(<span class="string">&quot;mysql&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">// 导入express模块</span></span><br><span class="line"><span class="keyword">var</span> express = <span class="built_in">require</span>(<span class="string">&quot;express&quot;</span>)</span><br></pre></td></tr></table></figure></p><h3 id="创建服务器与配置数据库"><a href="#创建服务器与配置数据库" class="headerlink" title="创建服务器与配置数据库"></a>创建服务器与配置数据库</h3><p>复制下述代码建立与数据库的连接和创建Express服务器：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 创建服务器</span></span><br><span class="line"><span class="keyword">const</span> app = <span class="title function_">express</span>()</span><br><span class="line"></span><br><span class="line"><span class="comment">// 通过CreatPool建立与Mysql数据库的链接</span></span><br><span class="line"><span class="keyword">const</span> db = mysql.<span class="title function_">createPool</span>(&#123;</span><br><span class="line">    <span class="attr">host</span>:<span class="string">&quot;数据库地址IP&quot;</span>,</span><br><span class="line">    <span class="attr">user</span>:<span class="string">&quot;数据库用户名&quot;</span>,</span><br><span class="line">    <span class="attr">password</span>:<span class="string">&quot;数据库密码&quot;</span>,</span><br><span class="line">    <span class="attr">database</span>:<span class="string">&quot;数据库名字&quot;</span></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure></p><h3 id="配置中间件"><a href="#配置中间件" class="headerlink" title="配置中间件"></a>配置中间件</h3><div class="tip warning faa-horizontal animated"><p>配置中间件进行服务端与客户端传送数据的处理</p></div><p>配置中间件样例：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 配置中间件</span></span><br><span class="line">app.<span class="title function_">use</span>(express.<span class="title function_">urlencoded</span>(&#123; <span class="attr">extended</span>: <span class="literal">false</span> &#125;))</span><br></pre></td></tr></table></figure></p><blockquote><p>上述代码的作用就是处理客户端发送的Http的Post请求中传送到服务器端的数据。不然的话，在接下来的定义<code>POST</code>请求文件的<code>function</code>方法中，想把数据更新到数据库中会显示<code>undefined</code>。</p></blockquote><h3 id="配置跨域请求"><a href="#配置跨域请求" class="headerlink" title="配置跨域请求"></a>配置跨域请求</h3><p>配置跨域请求样例：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 跨域配置</span></span><br><span class="line">app.<span class="title function_">all</span>(<span class="string">&#x27;*&#x27;</span>, <span class="keyword">function</span> (<span class="params">req, res, next</span>) &#123;</span><br><span class="line">    res.<span class="title function_">header</span>(<span class="string">&#x27;Access-Control-Allow-Origin&#x27;</span>, <span class="string">&#x27;*&#x27;</span>);</span><br><span class="line">    res.<span class="title function_">header</span>(<span class="string">&#x27;Access-Control-Allow-Headers&#x27;</span>, <span class="string">&#x27;Content-Type&#x27;</span>);</span><br><span class="line">    res.<span class="title function_">header</span>(<span class="string">&#x27;Access-Control-Allow-Methods&#x27;</span>, <span class="string">&#x27;*&#x27;</span>);</span><br><span class="line">    res.<span class="title function_">header</span>(<span class="string">&#x27;Content-Type&#x27;</span>, <span class="string">&#x27;application/json;charset=utf-8&#x27;</span>);</span><br><span class="line">    <span class="title function_">next</span>();</span><br><span class="line">  &#125;);</span><br></pre></td></tr></table></figure></p><blockquote><p>跨域请求就是指：当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指的是这样的一个概念：我们认为若协议 + 域名 + 端口号均相同，那么就是同域。在前后端分离开发的项目中，会出现前端端口和后端端口使用的不能是同一个端口的情况，假如一个域名为aaa.cn的网站，它发起一个资源路径为aaa.cn/getBookInfo的 Ajax 请求，那么这个请求是同域的，因为资源路径的协议、域名以及端口号与当前域一致（例子中协议名默认为http，端口号默认为80）。但是，如果发起一个资源路径为aaa.cn:8080/getBookInfo(这时候端口号是8080)的 Ajax 请求，那么这个请求就是跨域请求，因为域不一致，与此同时由于安全问题，这种请求会受到同源策略限制，也就是阻止访问。</p></blockquote><h3 id="配置GET与POST方法"><a href="#配置GET与POST方法" class="headerlink" title="配置GET与POST方法"></a>配置GET与POST方法</h3><div class="tip success"><p>到了这一步，就要到Express操作数据库与前后端数据互动的阶段了。</p></div><p>GET方法编写样例：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 获取数据</span></span><br><span class="line">app.<span class="title function_">get</span>(<span class="string">&#x27;/userinfo&#x27;</span>, <span class="function">(<span class="params">req, res</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="comment">// 数据库查询</span></span><br><span class="line">    db.<span class="title function_">query</span>(<span class="string">&#x27;select * from userinfo&#x27;</span>, <span class="function">(<span class="params">err, data</span>) =&gt;</span> &#123;</span><br><span class="line">        <span class="keyword">if</span> (err) <span class="keyword">return</span> <span class="variable language_">console</span>.<span class="title function_">log</span>(err.<span class="property">message</span>); <span class="comment">// 连接失败</span></span><br><span class="line">        <span class="keyword">if</span> (data.<span class="property">length</span> === <span class="number">0</span>) <span class="keyword">return</span> <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;数据为空&#x27;</span>); <span class="comment">// 数据长度为0 则没有获取到数据</span></span><br><span class="line">        <span class="comment">// 否则获取成功，将结果返回给客户端res.send</span></span><br><span class="line">        res.<span class="title function_">send</span>(&#123;</span><br><span class="line">            <span class="attr">status</span>: <span class="number">0</span>,</span><br><span class="line">            <span class="attr">msg</span>: <span class="string">&#x27;数据获取成功&#x27;</span>,</span><br><span class="line">            data</span><br><span class="line">        &#125;)</span><br><span class="line">    &#125;)</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure></p><blockquote><p>如果你英语比较好的话，你应该对上述代码比较熟悉：<br><div class="tabs" id="1"><ul class="nav-tabs"><li class="tab active"><button type="button" data-href="#1-1">app.get()</button></li><li class="tab"><button type="button" data-href="#1-2">db.query()</button></li><li class="tab"><button type="button" data-href="#1-3">req&res</button></li><li class="tab"><button type="button" data-href="#1-4">res.send({})</button></li></ul><div class="tab-contents"><div class="tab-item-content active" id="1-1"><p><strong><code>get</code>表示现在是GET方法，后面紧跟着get后括号内的<code>userinfo</code>就是辨别具体请求，例如前端访问<code>http://你的IP+端口/userinfo</code>，这时候服务器就会监听到userinfo，而这个方法就会被执行。</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-2"><p><strong><code>db</code>就是Mysql的一个连接，详情请看配置数据库连接，<code>query</code>就是查询的意思，整个方法意思就是执行查询数据库，并将查询结果返回。同理，紧跟着括号后面的，就是被执行的SQL语句。而查询结果，就是跟在SQL语句后面的<code>(&#39;select * from userinfo&#39;, (err, data)</code>中的<code>data</code>。</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-3"><p><strong><code>req</code>是request的简写，意思就是从前端传回来的要求数据，具体很复杂，可以在里面配置一个参数，<code>res</code>是respond的简写，意思就是发送回前端的数据，其中就可以添加<code>db.query</code>方法运行后查询的数据。</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-4"><p><strong>这个就很好理解了，就是在发送回前端的数据中添加内容。</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div><p></p></blockquote><p>POST方法编写样例：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 注册</span></span><br><span class="line">app.<span class="title function_">post</span>(<span class="string">&#x27;/register&#x27;</span>,<span class="function">(<span class="params">req,res</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="comment">//DataProcess</span></span><br><span class="line">    <span class="keyword">let</span> &#123; account, password &#125; = req.<span class="property">body</span></span><br><span class="line">    <span class="keyword">let</span> userinfo = &#123;account,password&#125;</span><br><span class="line">    <span class="comment">//SQL</span></span><br><span class="line">    <span class="keyword">var</span> sql = <span class="string">&quot;insert into userinfo (userid,passwd) values (?,?)&quot;</span></span><br><span class="line">    <span class="comment">//数据库插入</span></span><br><span class="line">    db.<span class="title function_">query</span>(sql,[userinfo.<span class="property">account</span>, userinfo.<span class="property">password</span>],<span class="function">(<span class="params">err, data</span>) =&gt;</span> &#123;</span><br><span class="line">        <span class="keyword">if</span> (err) <span class="keyword">return</span> <span class="variable language_">console</span>.<span class="title function_">log</span>(err.<span class="property">message</span>); <span class="comment">// 连接失败</span></span><br><span class="line">        <span class="keyword">if</span> (data.<span class="property">length</span> === <span class="number">0</span>) <span class="keyword">return</span> <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;数据为空&#x27;</span>); <span class="comment">// 数据长度为0 则没有获取到数据</span></span><br><span class="line">        <span class="comment">// 否则获取成功，将结果返回给客户端res.send</span></span><br><span class="line">        res.<span class="title function_">send</span>(&#123;</span><br><span class="line">            <span class="attr">status</span>: <span class="number">0</span>,</span><br><span class="line">            <span class="attr">msg</span>: <span class="string">&#x27;账户注册成功&#x27;</span>,</span><br><span class="line">            data</span><br><span class="line">        &#125;)</span><br><span class="line">    &#125;)</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure></p><blockquote><p>和GET样例基本差不多的代码：<br><div class="tabs" id="1"><ul class="nav-tabs"><li class="tab active"><button type="button" data-href="#1-1">app.post()</button></li><li class="tab"><button type="button" data-href="#1-2">req.body</button></li><li class="tab"><button type="button" data-href="#1-3">sql</button></li></ul><div class="tab-contents"><div class="tab-item-content active" id="1-1"><p><strong><code>post</code>表示现在是POST方法，后面紧跟着post后括号内的<code>register</code>就是辨别具体请求，例如前端访问<code>http://你的IP+端口/register</code>，这时候服务器就会监听到register，而这个方法就会被执行。</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-2"><p><strong><code>req.body</code>实际上就是前端传送到后端的数据，我这两行这么写是通过结构赋值的方法把数据从着个body中解析出来，方便更新到数据库。</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div><div class="tab-item-content" id="1-3"><p><strong>这个没啥可说的，就是SQL语句，但是需要注意的是，在我的SQL语句数据括号中，我写的是“？”，在接下来的查询方法中“？”会被后面的数据给替换掉，实现SQL语句的完整拼写。</strong></p><button type="button" class="tab-to-top" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div></p></blockquote><h3 id="编辑app入口配置"><a href="#编辑app入口配置" class="headerlink" title="编辑app入口配置"></a>编辑app入口配置</h3><p>上一步完成之后，最后就可以配置你后端app所需要的端口了：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 启动服务器</span></span><br><span class="line">app.<span class="title function_">listen</span>(<span class="number">5500</span>,<span class="function">() =&gt;</span> &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;后端部署运行中。。。&#x27;</span>)</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure></p><blockquote><p>注意，你写的端口号要确保开放，在VPS的防火墙中记得开放，如果你装了宝塔面板，也请在宝塔面板中的安全选项中开放端口。</p></blockquote><h2 id="启动与部署"><a href="#启动与部署" class="headerlink" title=" 启动与部署"></a><center> 启动与部署</h2><h3 id="启动后端"><a href="#启动后端" class="headerlink" title="启动后端"></a>启动后端</h3><p>这时候你就可以打开终端，敲上命令，注意要你编写的app.js文件夹里面：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">node app.js</span><br></pre></td></tr></table></figure></p><p>当你看到：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">PS C:\Users\xxx\桌面\demo&gt; node app.js</span><br><span class="line">后端部署运行中。。。</span><br></pre></td></tr></table></figure></p><blockquote><p>说明已经成功启动了。这时候你就可以用浏览器打开<code>http://localhost:你上一步写的端口，我这里是5500/userinfo</code>，如果你有正确配置数据库、数据库里有数据、SQL查询语句拼写正确的话，应该会出现数据。</p></blockquote><h3 id="部署后端"><a href="#部署后端" class="headerlink" title="部署后端"></a>部署后端</h3><p>你可以在宝塔面板的网站一栏中看到nodejs项目，你可以将文件上传到你的VPS中配置。</p><p>或者你也可以本地安装NodeJS，安装Screen软件<code>screen -S node</code>开启虚拟窗口执行<code>node app.js</code>。</p><h2 id="最后"><a href="#最后" class="headerlink" title=" 最后"></a><center> 最后</h2><p>&ensp;&ensp;&ensp;&ensp;这仅仅是一个最简单的后端api的demo，实际上，真实开发中绝对不像我这么写的简陋，仅仅是作为自己实验和自己搭建一部分自用的功能而搭建的后端。总的来说，国内开发大部分都是Go和Java一系，Node相对涉猎较少，但是其中的Express框架相对于主流后端来说轻便，迅速，但是多线程缺乏，本文章也仅仅是稍稍解释，实际上学完了Node、Express框架仍然是不被国内主流认可的。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;写在前面&quot;&gt;&lt;a href=&quot;#写在前面&quot; class=&quot;headerlink&quot; title=&quot; 写在前面&quot;&gt;&lt;/a&gt;&lt;center&gt; 写在前面&lt;/h2&gt;&lt;p&gt;&amp;ensp;&amp;ensp;&amp;ensp;&amp;ensp;本文章仅仅涉及到基本的NodeJS语法、Express.</summary>
      
    
    
    
    <category term="后端" scheme="https://blog.netreflix.com/categories/%E5%90%8E%E7%AB%AF/"/>
    
    
    <category term="Nodejs" scheme="https://blog.netreflix.com/tags/Nodejs/"/>
    
    <category term="Express" scheme="https://blog.netreflix.com/tags/Express/"/>
    
  </entry>
  
  <entry>
    <title>CSGO社区</title>
    <link href="https://blog.netreflix.com/posts/2c23d359.html"/>
    <id>https://blog.netreflix.com/posts/2c23d359.html</id>
    <published>2022-10-01T15:29:35.000Z</published>
    <updated>2022-10-17T10:00:41.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="欢迎来到Netreflix社区服务器"><a href="#欢迎来到Netreflix社区服务器" class="headerlink" title=" 欢迎来到Netreflix社区服务器"></a><center> 欢迎来到Netreflix社区服务器</h1><h2 id="这个是什么？"><a href="#这个是什么？" class="headerlink" title=" 这个是什么？"></a><center> 这个是什么？</h2><h4 id="如你所见，这是我创建的第一台CSGO社区服务器-接下来将解释服务器中所需要学会的配置指令，能够帮助更好地在游戏中获得更好的游戏体验。"><a href="#如你所见，这是我创建的第一台CSGO社区服务器-接下来将解释服务器中所需要学会的配置指令，能够帮助更好地在游戏中获得更好的游戏体验。" class="headerlink" title="如你所见，这是我创建的第一台CSGO社区服务器,接下来将解释服务器中所需要学会的配置指令，能够帮助更好地在游戏中获得更好的游戏体验。"></a><center>如你所见，这是我创建的第一台CSGO社区服务器,接下来将解释服务器中所需要学会的配置指令，能够帮助更好地在游戏中获得更好的游戏体验。</h4><h2 id="Commands"><a href="#Commands" class="headerlink" title=" Commands"></a><center> Commands</h2><div class="note success simple"><p>Tips：只需在CSGO服务器内打开聊天框输入以下命令即可</p></div><div class="table-wrap">    <table>        <thead>            <tr>                <th>指令用法</th>                <th>功能</th>            </tr>        </thead>        <tbody>            <tr>                <td>!menu</td>                <td>这是一个总的功能列表<br>可以从总调出所有功能菜单</td>            </tr>            <tr>                <td>!ws</td>                <td>这是一个换刀和换枪械皮肤的菜单<br>可以从中配置您所需要的各种武器的皮肤，并且永久保存<br>但仅限在本服务器中保存数据</td>            </tr>            <tr>                <td>!sticker</td>                <td>这是一个换皮肤贴纸的菜单<br>必须选择一把武器，然后可以从中选择你喜欢的贴纸</td>            </tr>            <tr>                <td>!music</td>                <td>这是一个换音乐盒的菜单<br>可以从中选择你喜欢的音乐盒</td>            </tr>            <tr>                <td>!glove</td>                <td>这是一个换手套的菜单<br>可以从中选择你喜欢的手套<br>同武器皮肤一致，换边后需要重新配置</td>            </tr>            <tr>                <td>!wiki</td>                <td>这是一个道具练习的菜单<br>可以在热身阶段练习投掷物的扔法<br>但在比赛开始过后，将暂时停止使用</td>            </tr>        </tbody>    </table></div><h2 id="Commands-Operator"><a href="#Commands-Operator" class="headerlink" title=" Commands Operator"></a><center> Commands Operator</h2><div class="note info flat"><p>以上是一些基础的命令，接下来将要解释作为OP管理员所要了解的命令</p></div><div>    <table class="table-warp">        <thead>            <tr>                <th>指令用法</th>                <th>功能</th>            </tr>        </thead>        <tbody>            <tr>                <td>!admin</td>                <td>这是一个管理员菜单<br>可以从总调出管理员命令</td>            </tr>            <tr>                <td>!setup<br>!get5</td>                <td>这是一个开启满十竞技或者其他比赛配置的菜单<br>可以从中配置各项比赛，默认进入服务器是满十配置状态</td>            </tr>            <tr>                <td>!Get5</td>                <td>这也是一个开启满十竞技的菜单<br>由于Get5的专业性，建议使用上述第二个命令开启比赛</td>            </tr>        </tbody>    </table></div><div class="note warning simple"><p>接下来的命令将是区别于聊天框，命令写在控制台才能生效！</p></div><div>    <table class="table-warp">        <thead>            <tr>                <th>指令sm_rcon用法</th>                <th>功能</th>            </tr>        </thead>        <tbody>            <tr>                <td>sm_rcon map + 地图名</td>                <td>可以向服务器后台调出命令，强行服务器换图<br>使用时去掉加号“➕”，注意空格</td>            </tr>            <tr>                <td>sm_rcon bot_kick</td>                <td>可以向服务器后台调出命令，强行服务器踢出机器人</td>            </tr>        </tbody>    </table></div><h3 id="好了，看到这里你已经学会了大部分的服务器指令了，点击下方即可进入"><a href="#好了，看到这里你已经学会了大部分的服务器指令了，点击下方即可进入" class="headerlink" title=" 好了，看到这里你已经学会了大部分的服务器指令了，点击下方即可进入"></a><center> 好了，看到这里你已经学会了大部分的服务器指令了，点击下方即可进入</h3><a class="btn-anzhiyu block center green larger" href="steam://rungame/730/76561202255233023/+connect cloud.netreflix.com:27015"   title="点击进入社区服务器"><i class="far fa-hand-point-right"></i><span>点击进入社区服务器</span></a>]]></content>
    
    
    <summary type="html">CSGO社区服务器</summary>
    
    
    
    <category term="生活日常" scheme="https://blog.netreflix.com/categories/%E7%94%9F%E6%B4%BB%E6%97%A5%E5%B8%B8/"/>
    
    
    <category term="CSGO社区服务器" scheme="https://blog.netreflix.com/tags/CSGO%E7%A4%BE%E5%8C%BA%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="https://blog.netreflix.com/posts/4a17b156.html"/>
    <id>https://blog.netreflix.com/posts/4a17b156.html</id>
    <published>2022-09-01T10:29:35.000Z</published>
    <updated>2026-03-29T02:56:29.706Z</updated>
    
    <content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">&quot;My New Post&quot;</span></span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Welcome to &lt;a href=&quot;https://hexo.io/&quot;&gt;Hexo&lt;/a&gt;! This is your very first post. Check &lt;a href=&quot;https://hexo.io/docs/&quot;&gt;documentation&lt;/a&gt; for</summary>
      
    
    
    
    <category term="前端" scheme="https://blog.netreflix.com/categories/%E5%89%8D%E7%AB%AF/"/>
    
    
    <category term="Hexo" scheme="https://blog.netreflix.com/tags/Hexo/"/>
    
  </entry>
  
</feed>
