我使用 Node v8.11.1 和 Express 4.16.3 以及 postgresql 作为数据库,因此我使用 pg
模块。我对 promise 还很陌生。这是我应该可以工作的代码
路线
router.post('/save',
(req, res)=>{
req.checkBody('email', 'put email').notEmpty().trim();
let errors = req.validationErrors();
if (errors) {
req.session.msgs = errors;
res.redirect('/signup');
}
else {
var user = {email:req.body.email};
signup.signup(user)
.then((res)=>{
req.session.msgs = [{msg: res}];
res.redirect('/events');
},
(rej)=>{
res.redirect('/signup');
req.session.msgs = [{msg: 'err'}];
}
)
.catch((err)=>{
res.redirect('/signup');
req.session.msgs = [{msg: 'err'}];
});
}
});
函数
const signup = (user) => {
return new Promise((res, rej)=>{
pool.connect( //connect to db
(err, client, done) => {
if (err) {
return rej(err); //rej
}
client.query('insert into user (email) values($1)',[user.email]);
done();
res(user.email);
}// pool anonumous funct
);//pool connect
})//promise
};
exports.signup = signup;
所以,我想这应该可以立即工作,但我在这部分中收到 err TypeError: res.redirect is not a function
引用我的路线
signup.signup(user)
.then((res)=>{
req.session.msgs = [{msg: res}];
res.redirect('/events'); // <= REFERS HERE
},
我错过了什么?为什么这不是一个函数?如何解决这个问题?谢谢
最佳答案
您在 then
回调中使用 res
,该回调会隐藏 router.post
中的 res
。
因此您需要重命名其中一个。
关于node.js - res.redirect 不是 Promise 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50427032/