我有一个用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;
控制器(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 数据,数据也已成功插入db。name
仅包含""
,而属性集NOT_NULL = true
如何避免处理上述问题并发送错误响应,例如年龄应为整数。
谢谢。
答案 0 :(得分:1)
您可以签出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);
});
答案 1 :(得分:0)
您可以仅使用续集模型validation:
'use strict';
module.exports = (sequelize, DataTypes) => {
const PersonalInfo = sequelize.define('PersonalInfo', {
name: {
type: DataTypes.STRING,
validate: {
is: ["^[a-z]+$",'i'] // will only allow letters
}
},
age: {
type: DataTypes.INTEGER,
validate: {
isInt: true // checks for valid integers
}
}
}, {
tableName: "PersonalInfo",
timestamp: false
});
PersonalInfo.associate = function(models) {
// associations can be defined here
};
return PersonalInfo;
};