我有一个用 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;
};
即使服务运行成功。我有一些问题,
- 即使属性
age
包含 varchar 数据,数据仍成功插入数据库。 - 即使属性
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/