res.redirect не является обещанной функцией - PullRequest
0 голосов
/ 19 мая 2018

Я использую узел v8.11.1 с 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
       },

Чего мне не хватает?Почему это не функция?Как это исправить?Спасибо

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Вы скрываете "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'}];
     });
   }
});
0 голосов
/ 19 мая 2018

Вы используете res в обратном вызове then, и он скрывает res от router.post.

Так что вам нужно переименовать один из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...