正确处理 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
  }
  ...
});