Node + Express:在将数据发布到数据库

时间:2015-08-19 05:01:39

标签: node.js express

我是node.js的新手,正在使用Express和Sequelize构建一个restful api。现在我只需要通过以下代码创建用户:

router.post('/preregister', function(req, res, next) {
    models.users.create(req.body, function(err, user) {
        console.log('req: ' + req.body);
        if (err) res.json(err);
        res.json(user);
    });
});

系统输出sql语句,我可以看到数据是通过查询数据库创建的,但是服务器挂起并且不再执行任何操作,甚至没有打印出“req”数据。在if语句之前的行,看起来像函数(错误,用户)部分永远不会被触及。看起来基本是错的。但缺少什么?

修改

用户模型定义如下:

"use restrict";

module.exports = function(sequelize, Sequelize) {
    var users = sequelize.define('users', {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true,
            allowNull: false,
            isUnique: true,
            field: 'id' 
        },
        email: {
            type: Sequelize.STRING,
            isUnique: true,
            allowNull: false,
            validate: {
                isEmail: true
            },
            field: 'email'
        }
    }, {
        freezeTableName: true
    });

    return users;
};

3 个答案:

答案 0 :(得分:1)

Sequelize在其最新版本中使用Promises

router.post('/preregister', function(req, res, next) {
    var user = models.users.build(req.body);
        user.save()
        .complete(function(err) {
            if (err) return next(err);
            res.json(user);
        });
});

答案 1 :(得分:1)

Sequelize使用bluebird promises库的(修改后的版本),这意味着它应该有效:

router.post('/preregister', function(req, res) {
  models.users.create(req.body).then(function(user) {
    res.json(user);
  }).catch(function(err) {
    console.error(err);
    res.sendStatus(500);
  });
});

答案 2 :(得分:0)

router.post('/preregister', function(req, res, next) {
    models.users.create(req.body, function(err, user) {
        if (err) res.json(err);
        res.json(user);
    });
});