我使用node v8.11.1 with express 4.16.3和postgresql作为我的数据库,所以我使用pg
模块。我是新的承诺然后。这是我应该工作的代码
路线
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
},
我错过了什么?为什么这不是一个功能?如何解决这个问题?谢谢
答案 0 :(得分:2)
您在res
回调中使用了then
,并且res
隐藏了router.post
的{{1}}。
所以你需要重命名其中一个。
答案 1 :(得分:1)
您在数据库响应中隐藏“res”:
router.post('/save',
(req, res)=>{ // one "res" here!
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)=>{ // SHADOWS "res" in here !
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'}];
});
}
});