简单的node服务

# 实现思路

  • 首先,一个服务,既要能本地调试,也需要能部署在服务器端,所以需要将 dev 和 prod 不一样的一些变量抽离出来,其他的文件和变量都是一样的,这样每次 全量 push 这些文件到服务器端即可;这里我的服务不一致的变量有

    • isProd:代表是否是生产环境,本地调试的时候可以用这个变量,封装一个 log 函数用来调试

    • connectionInfo: mysql 需要用到的连接服务器的配置,本地连接 target 地址肯定是 ip 地址,服务器直接用 localhost 即可,还有账户名之类的,服务器端可以用 root 账户

    • sshInfo:本地服务需要连接服务器的时候需要用到的 ssh 配置信息,服务器端不需要这个

  • node 最基本服务需要用到的包 express body-parser cors

    • 本地服务直接执行 yarn add -D 即可,将这些包安装在前端项目里面

    • 服务器上则需要在服务的 js 文件所在的文件夹执行 npm init命令,再手动修改生成的 package.json 文件,最后执行 npm install,配置服务所需要的环境

  • node 服务的启动

    • 本地服务再 package.json 里面新增一条启动命令即可,例如 "sql": "node scripts/mysql.mjs",到时候本地直接执行 yarn sql 就可以启动本地服务了

    • 服务器上不可能每次都到服务器上去执行 node mysql.mjs 命令,所以需要写一个 service 文件,用来启动这个服务,这里是我的实现

      • 先写了个 shell 脚本,里面配置一个命令 /root/.nvm/versions/node/v19.9.0/bin/node mysql.mjs,在这个脚本里面去启动服务

      • 再写一个 service,在这个服务里面去启动这个 shell 脚本

        • 服务里面设置启动命令 ExecStart=/bin/bash /etc/nginx/service/start.sh

        • 设置自动重启 Restart=always,重启间隔为 3 秒 RestartSec=3

        • 设置为开机自启 sudo systemctl enable myService.service

# 实现代码

点击 展开/收起 jsx 代码
// 服务文件示例
/**
 * @des 连接数据库
 */
import express from 'express';
import bodyParser from 'body-parser';
import cors from 'cors';

import qrLoginRoute from './qrLoginRoute.mjs'; // 导入 二维码相关的 接口

// 使用  qrCodeRoutes
app.use('/mysql', qrLoginRoute);
/** ----------------------------------------------------开启服务监听---------------------------------------- */
app.listen(6005, () => {
  console.log('\x1b[35m%s\x1b[0m', 'mysql server working...');
});

export default app;
// qrLoginRoute 服务示例
/**
 * @des 二维码登录 相关接口
 */
import express from 'express';

const router = express.Router();
// 用户表查询
router.post(
  '/getUserList',
  authenticateAndAuthorize(10000),
  async (req, res) => {
    log(JSON.stringify(req.body));
    const queryUserSql = `select * from ${DB_NAME}.user_table where user_type <> "superAdmin" `;
    try {
      const list = await runSql(queryUserSql);
      res.send(list);
    } catch (e) {
      res.send({
        error: '查询接口报错!',
      });
    }
  },
);

export default router;