Невозможно добавить токен jwt в ответ node.js

Я новичок в экосистеме javascript и хочу добавить токен jwt для ответа из этого маршрутизатора регистрации:

router.post('/register', (req, res)=> {

    User.findOne({email: req.body.email})
     .then(user => {
        if(user) {
            return res.status(400).json({error: 'Email already exists'});
        } else {                    
            const newUser = new User({
                username: req.body.username,
                email: req.body.email,
                password: req.body.password
            });

            bcrypt.genSalt(10, (err, salt)=> {
                bcrypt.hash(newUser.password, salt, (err, hash)=> {
                    if (err)  throw err;
                    newUser.password = hash;
                    newUser.save()                      
                      .then(user => res.status(200).json(user)) //<=Problem is here
                      .catch(err => console.log(err));
                } )
            })
        }
     })

});

Фрагмент jwt (который отлично работает на роутере longin) выглядит следующим образом:

        const payload = {
            username: user.username
        }

        //sign token
        jwt.sign(
            payload, 
            keys.secretOrKey, 
            { expiresIn: 3600}, 
            (err, token)=> { 
                res.json({
                    success: true,
                    token: 'Bearer '+ token,
                    username: username
                });
            });

Проблема в том, что я не знаю, как добавить фрагмент в заголовок ответа. Когда я добавляю его после .then(user =>, я получаю ошибку SyntaxError: Unexpected token const.

Как я могу это сделать?

Вы добавляли фрагмент jwt за .then(user =>, используя фигурные скобки, обертывающие фрагмент?

Bee 10.09.2018 11:41

Да, я только что справился с вырезкой, которую вы видите выше после .then(user =>

Babr 10.09.2018 11:43

@Momin Мой вопрос в том, как интегрировать подписанный токен jwt в существующее обещание. Ссылка, которую вы упомянули, в этом не помогает.

Babr 10.09.2018 11:49
0
4
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы не заключили фрагмент jwt в фигурные скобки. Без них стрелочная функция, в которой появляется проблема, принимает только одно выражение. Вместо этого вставьте фрагмент jwt в следующий фрагмент.

bcrypt.genSalt(10, (err, salt)=> {
    bcrypt.hash(newUser.password, salt, (err, hash)=> {
    if (err)  throw err;
    newUser.password = hash;
    newUser.save()                      
        .then(user => {
          res.status(200).json(user);
          <JWT_Snippet_here>
        }
        .catch(err => console.log(err));
    })
})

Здесь вы можете увидеть, как определяется синтаксис стрелочных функций. Следующая цитата показывает самую важную часть.

(param1, param2, …, paramN) => { statements }

(param1, param2, …, paramN) => expression

Фигурные скобки необходимы для использования списка операторов. Ошибка, с которой вы столкнулись, возникла из-за того, что ваш движок JavaScript ожидал одно выражение, но вместо этого нашел список операторов.

Спасибо за совет. Это устранило ошибку, но я все еще не получаю токен в заголовке ответа в консоли браузера. res.data.token - это undefined

Babr 10.09.2018 11:57

Другие вопросы по теме