我是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;
};
答案 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);
});
});