node.js - ExpressJS 中的 API 错误处理和数据验证

标签 node.js rest express

我有一个用 ExpressJS 构建的 RestAPI。 POST方法运行良好,并将数据保存到MySQL中。这是我的代码:

路由器(index.js)
var express = require('express');
var router = express.Router();
var cont = require('../controllers');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

/* REGISTER */
router.post('/personal-info', cont.personalInfo.createNewUser);

module.exports = router;
Controller (PersonalInfo.js)
const PersonalInfo = require('../models').PersonalInfo;
const utils = require('../Utils/ResUtils');

module.exports = {
    createNewUser(req, res) {
        var name = req.body.name,
            age = req.body.age
            PersonalInfo.create({
                name : name,
                age : age,
                createdAt: new Date(),
                updatedAt: new Date()
            }).then(Personal_Info => {
                res.json({
                    'status': 'OK',
                    'messages': 'Personal Info Created',
                    'data': Personal_Info
                })
            }).catch( reason => utils.error(res, reason));
    }
}
模型(PersonalInfo.js)
'use strict';
module.exports = (sequelize, DataTypes) => {
  const PersonalInfo = sequelize.define('PersonalInfo', {
    name: DataTypes.STRING,
    age: DataTypes.INTEGER
  }, {
    tableName: "PersonalInfo",
    timestamp: false
  });
  PersonalInfo.associate = function(models) {
    // associations can be defined here
  };
  return PersonalInfo;
};

即使服务运行成功。我有一些问题,

  1. 即使属性 age 包含 varchar 数据,数据仍成功插入数据库。
  2. 即使属性name仅包含"",但属性设置NOT_NULL = true,数据仍成功插入数据库

如何避免处理上述问题并发送错误响应,例如年龄应该是整数

谢谢。

最佳答案

您可以查看 express-validator库,这对于输入验证非常有用,例如:

const { check, validationResult } = require('express-validator');

/* REGISTER */
app.post('/personal-info', [
    // Name should be at least 1 char long
    check('name').isLength({ min: 1 }),
    // Age should be an integer
    check('age').isInt()
  ], (req, res) => {
    // Finds the validation errors in this request and wraps them in an object with handy functions
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(422).json({ errors: errors.array() });
    }

    // Forward call onto createNewUser;
    cont.personalInfo.createNewUser(req, res);
});

关于node.js - ExpressJS 中的 API 错误处理和数据验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57036113/

相关文章:

javascript - res.redirect() 在 Chrome 中不起作用 - 已找到。重定向至

node.js - 如何选择 Mongoose 中的对象数组?

javascript - 放大可见图像的中心?

php - 如何组织 REST API 参数的解析和验证?

node.js - 发布周期的 Github 结构

javascript - 响应已返回后,Alexa 技能出现响应问题

java - 在 Office 365 REST API 中对事件使用扩展属性

java - Jersey/Grizzly POST 对于大 URI 失败

javascript - 存在 Cookie header ,但 Cookie 未存储在浏览器中

mysql - 如何在nodejs中的sequelize模型mysql中列注释