正确处理 express 中的 API 表单输入
Proper handling of API form input in express
我正在做一个 API 的 express,我想问一下是否有更好的方法来处理用户输入。我使用 Express 4 和 Sequelize,并使用 Sequelize 进行验证。但是,我创建的路线有点像这样:
app.route('/cards').post(requireAuthenticated, function (req, res, next) {
// Input validation
Card.create({
name: req.body.name,
caption: req.body.caption,
cost: req.body.cost,
tier: req.body.tier,
cardType: req.body.cardType,
readyTime: req.body.readyTime,
attack: req.body.attack,
health: req.body.health,
movement: req.body.movement,
range: req.body.range,
upkeep: req.body.upkeep,
canAttack: req.body.canAttack,
canDefend: req.body.canDefend,
canMove: req.body.canMove,
targetable: req.body.targetable,
description: req.body.description,
comment: req.body.comment,
user_id: req.user.id
})
.then( function (card) {
res.send(card);
})
.catch( function (e) { next(e); });
});
一切正常,但还有很多不足之处。我省略了输入验证,因为它更长,而且这甚至不是我 API.
中最大的模型
一个问题显然是,只要未设置属性,模型的属性就会设置为 null
而不是默认值或旧值。然后是重新使用此代码的问题。
不过,我觉得我在这里做错了什么。我试图在此找到一个 npm
模块,但只找到了用于验证的模块,而不是用于将输入正确输入数据库的模块。
也许有人有更好、更优雅的解决方案?
关于创建记录的冗长,可以使用node自带的extend函数:
var extend = require('util')._extend
var newCard = extend({}, req.body);
newCard.user_id = req.user.id;
Card.create(newCard).then(...);
并且可以在定义模型时使用 sequelize 为列定义默认值:
sequelize.define('modelName', {
columnA: {
type: Sequelize.BOOLEAN,
defaultValue: true
}
...
});
我正在做一个 API 的 express,我想问一下是否有更好的方法来处理用户输入。我使用 Express 4 和 Sequelize,并使用 Sequelize 进行验证。但是,我创建的路线有点像这样:
app.route('/cards').post(requireAuthenticated, function (req, res, next) {
// Input validation
Card.create({
name: req.body.name,
caption: req.body.caption,
cost: req.body.cost,
tier: req.body.tier,
cardType: req.body.cardType,
readyTime: req.body.readyTime,
attack: req.body.attack,
health: req.body.health,
movement: req.body.movement,
range: req.body.range,
upkeep: req.body.upkeep,
canAttack: req.body.canAttack,
canDefend: req.body.canDefend,
canMove: req.body.canMove,
targetable: req.body.targetable,
description: req.body.description,
comment: req.body.comment,
user_id: req.user.id
})
.then( function (card) {
res.send(card);
})
.catch( function (e) { next(e); });
});
一切正常,但还有很多不足之处。我省略了输入验证,因为它更长,而且这甚至不是我 API.
中最大的模型一个问题显然是,只要未设置属性,模型的属性就会设置为 null
而不是默认值或旧值。然后是重新使用此代码的问题。
不过,我觉得我在这里做错了什么。我试图在此找到一个 npm
模块,但只找到了用于验证的模块,而不是用于将输入正确输入数据库的模块。
也许有人有更好、更优雅的解决方案?
关于创建记录的冗长,可以使用node自带的extend函数:
var extend = require('util')._extend
var newCard = extend({}, req.body);
newCard.user_id = req.user.id;
Card.create(newCard).then(...);
并且可以在定义模型时使用 sequelize 为列定义默认值:
sequelize.define('modelName', {
columnA: {
type: Sequelize.BOOLEAN,
defaultValue: true
}
...
});