express开发api指南--增删改查接口

发布时间 2023-05-25 16:49:16作者: 火炬冬天

现在就是正式编写api了。这边我还是以之前那张 t_msd_msl_2 表为例子。具体的sql知识需要自己准备啦。
一般增删改使用post接口,走requestBody模式。故需引入中间件来解析。

//安装依赖
cnpm install --save body-parser
//app.js里引入
var bodyParser = require("body-parser");
app.use(
bodyParser.urlencoded({
  extended: false,
})
); //post传参body格式

不多说,直接上代码。直接修改routes下的index.js。
首先定一下Conroller,表示index下的接口统一前缀,可以不定义。
var Controller = "/msdMsl";

5.1 增

router.post(Controller + "/add", function (req, res, next) {
var sql = `INSERT INTO t_msd_msl_2 (msl_id, msl, floor_life, unit, floor_environment, enabled) 
VALUES ('${req.body.msl_id}', '${req.body.msl}', ${req.body.floor_life}, ${req.body.unit}, '${req.body.floor_environment}', '${req.body.enabled}')`;
db.result(sql)
  .then(() => {
    res.send(resultInfo());
  })
  .catch((error) => {
    res.send(resultInfo(1, "", error.detail || error.hint));
  });
});

5.2 删

router.post(Controller + "/delete", function (req, res, next) {
var sql = `delete from t_msd_msl_2 where msl_id = '${req.body.msl_id}'`;
db.result(sql)
  .then((result) => {
    if (result.rowCount == 1) {
      res.send(resultInfo());
    } else {
      res.send(resultInfo(1, "", "msl_id错误"));
    }
  })
  .catch((error) => {
    res.send(resultInfo(1, "", error.detail || error.hint));
  });
});

5.3 改

router.post(Controller + "/update", function (req, res, next) {
var sql = `update t_msd_msl_2 set msl = '${req.body.msl}',floor_life = ${req.body.floor_life},unit = ${req.body.unit},floor_environment = '${req.body.floor_environment}',enabled = '${req.body.enabled}' where msl_id = '${req.body.msl_id}'`;
db.result(sql)
  .then((result) => {
    if (result.rowCount == 1) {
      res.send(resultInfo());
    } else {
      res.send(resultInfo(1, "", "msl_id错误"));
    }
  })
  .catch((error) => {
    res.send(resultInfo(1, "", error.detail || error.hint));
  });
});

5.4 查

router.get(Controller + "/search", function (req, res, next) {
var sql = `select * from t_msd_msl_2 where 1=1`;
sql += req.query.msl_id ? `and msl_id like '%${req.query.msl_id}%'` : "";
sql += req.query.msl ? `and msl like '%${req.query.msl}%'` : "";
sql += req.query.floor_life ? `and floor_life = ${req.query.floor_life}` : "";
sql += req.query.unit ? `and unit = ${req.query.unit}` : "";
sql += req.query.floor_environment
  ? `and floor_environment like '%${req.query.floor_environment}%'`
  : "";
sql += req.query.enabled ? `and enabled like '%${req.query.enabled}%'` : "";
db.result(sql)
  .then((result) => {
    res.send(resultInfo(0, result.rows));
  })
  .catch((error) => {
    res.send(resultInfo(1, "", error));
  });
});

5.5 分页查

router.get(Controller + "/searchPage", function (req, res, next) {
var sql = `select * from t_msd_msl_2 where 1=1`;
sql += req.query.msl_id ? `and msl_id like '%${req.query.msl_id}%'` : "";
sql += req.query.msl ? `and msl like '%${req.query.msl}%'` : "";
sql += req.query.floor_life ? `and floor_life = ${req.query.floor_life}` : "";
sql += req.query.unit ? `and unit = ${req.query.unit}` : "";
sql += req.query.floor_environment
  ? `and floor_environment like '%${req.query.floor_environment}%'`
  : "";
sql += req.query.enabled ? `and enabled like '%${req.query.enabled}%'` : "";

db.result(sql)
  .then((result) => {
    var total = result.rowCount || 0; //总数
    var size = Number(req.query.size) || 10; //每页显示数量
    var page = Number(req.query.page) || 1; //当前页数
    var start = (page - 1) * size;
    sql += `limit ${size} offset ${start}`;
    db.result(sql)
      .then((back) => {
        var obj = {
          page: page,
          size: size,
          total: total,
          list: [],
        };
        obj.list = back.rows;
        res.send(resultInfo(0, obj));
      })
      .catch((err) => {
        res.send(resultInfo(1, "", err));
      });
  })
  .catch((error) => {
    res.send(resultInfo(1, "", error));
  });
});

5.6 swagger编写

/**,
* @swagger
* /api/msdMsl/add:
*    post:
*      tags:
*       - MSL
*      summary: 新增
*      requestBody:
*         description: 参数格式
*         required: true
*         content:
*          application/json:
*            schema:
*              $ref: '#/components/msdMsl'
*      responses:
*        200:
*          description: 成功返回格式
*          content:
*           application/json:
*             schema:
*               $ref: '#/components/callback'
* /api/msdMsl/delete:
*    post:
*      tags:
*       - MSL
*      summary: 删除
*      requestBody:
*         description: 参数格式
*         required: true
*         content:
*          application/json:
*            schema:
*              tyep: object
*              properties:
*                msl_id:
*                  type: string
*                  example: ''
*      responses:
*        200:
*          description: 成功返回格式
*          content:
*           application/json:
*             schema:
*               $ref: '#/components/callback'
* /api/msdMsl/update:
*    post:
*      tags:
*       - MSL
*      summary: 修改
*      requestBody:
*         description: 参数格式
*         required: true
*         content:
*          application/json:
*            schema:
*              $ref: '#/components/msdMsl'
*      responses:
*        200:
*          description: 成功返回格式
*          content:
*           application/json:
*             schema:
*               $ref: '#/components/callback'
* /api/msdMsl/search:
*    get:
*      tags:
*       - MSL
*      summary: 查询所有
*      parameters:
*          - name: msl_id
*            in: query
*            description: 湿敏ID
*          - name: msl
*            in: query
*            description: 湿敏等级
*          - name: floor_life
*            in: query
*            description: 暴露时间
*          - name: unit
*            in: query
*            description: 单位(0,小时;1,天;2,年)
*          - name: floor_environment
*            in: query
*            description: 暴露环境
*          - name: enabled
*            in: query
*            description: 是否可用
*      responses:
*        200:
*          description: 成功返回格式
*          content:
*           application/json:
*             schema:
*               $ref: '#/components/callback'
* /api/msdMsl/searchPage:
*    get:
*      tags:
*       - MSL
*      summary: 分页查询
*      parameters:
*          - name: msl_id
*            in: query
*            description: 湿敏ID
*          - name: msl
*            in: query
*            description: 湿敏等级
*          - name: floor_life
*            in: query
*            description: 暴露时间
*          - name: unit
*            in: query
*            description: 单位(0,小时;1,天;2,年)
*          - name: floor_environment
*            in: query
*            description: 暴露环境
*          - name: enabled
*            in: query
*            description: 是否可用
*          - name: page
*            in: query
*            description: 当前页数
*            schema:
*              type: integer
*              default: 1
*          - name: size
*            in: query
*            description: 每页数量
*            schema:
*              type: integer
*              default: 10
*      responses:
*        200:
*          description: 成功返回格式
*          content:
*           application/json:
*             schema:
*               $ref: '#/components/callback'
* components:
*    msdMsl:
*      tyep: object
*      properties:
*        msl_id:
*          type: string
*          description: 湿敏ID
*          example: ''
*        msl:
*          type: string
*          description: 湿敏等级
*          example: ''
*        floor_life:
*          type: integer
*          description: 暴露时间
*          example: 10
*        unit:
*          type: integer
*          description: 单位(0,小时;1,天;2,年)
*          enum:
*           - 0
*           - 1
*           - 2
*          example: 0
*        floor_environment:
*          type: string
*          description: 暴露环境
*          example: ''
*        enabled:
*          type: string
*          description: 是否可用
*          example: 'Y'
*    callback:
*      type: object
*      properties:
*         Code:
*          type: integer
*          format: int64
*          example: 0
*         Data:
*          type: array
*          example: []
*         Message:
*           type: string
*           example: ''
*    securitySchemes:
*      Authorization:
*        type: apiKey
*        name: Authorization
*        in: header
*
*/

刷新页面,是不是就像样了。还差一步,就是把登录验证加上。
具体的sql语句我就不细讲了,每个需求都不一样。