Node js API REST service auth translate text mail почтовый узел - PullRequest
0 голосов
/ 22 апреля 2019

Я разработал REST API с использованием узла js и express.Я использую почтовую программу для отправки почты, когда пользователь регистрируется.У меня есть службы аутентификации (метод POST), которые читают код языка, передаваемый приложением, и отправляют письмо с переведенным текстом и токеном для проверки регистрации.Ссылка с токеном - это запрос GET, который отправляет другую почту.Как я могу сказать методу GET, какой код языка используется, чтобы можно было отправить письмо с переводом?

Здравствуйте, я внедрил этот код для токена проверки:

// Verification token
router.get('/verification/:language/:token/', function(req, res, next) {
const language = req.params.language;

console.log(language); 


// Check for validation errors
var errors = req.validationErrors();
if (errors) return res.status(400).send(errors);

// Find a matching token
Token.findOne({ token: req.params.token }, function (err, token) {
//if (!token) return res.status(400).send({status: 'ko',error: {type: 'not-verified', msg: 'We were unable to find a valid token. Your token my have expired.'}} );
if (!token) return res.redirect('https://localhost/expiredtoken');



// If we found a token, find a matching user
User.findOne({ _id: token._userId }, function (err, user) {
  if (!user) return res.status(400).send({ msg: 'We were unable to find a user for this token.' });

  //if (user.isVerified) return res.status(400).send({status: 'ko',error:{type: 'already-verified', msg: 'This user has already been verified.'}});
  if (user.isVerified) return res.redirect('https://localhost/userverified');

  // Verify and save the user
  user.isVerified = true;
  user.save(function (err) {
    if (err) { return res.status(500).send({ msg: err.message }); }
    //res.status(200).send({status: 'ok', data: { msg: 'The account has been verified. Please log in.'}});
    res.redirect('https://localhost/login');


    //
    var text_email;
    if (language == 'en') {
      text_email = 'Hi'
    }
    if (language == 'it') {
      text_email = 'Ciao'
    }


    var client = nodemailer.createTransport(sgTransport(options));

    var email = {
        from: 'noreply@test.com',
        to: user.email,
        subject: 'Registration successfully confirmed',

        text: text_email
      };

    client.sendMail(email, function(err, json){
        if (err){
            return res.status(500).send({ msg: err.message });
        }
        else {
            res.status(200).send({status: 'ok', data: { msg: 'A verification email has been sent to ' + user.email + '.'}} )
        }
    });



    //

        });
    });
});

});

Проверка работает, а такжеотправлять почту, но происходит сбой приложения с этой ошибкой: Ошибка [ERR_HTTP_HEADERS_SENT]: Невозможно установить заголовки после их отправки клиенту

Любая помощь, пожалуйста ??

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Используйте GET http://localhost/route?language=en.

Если вы используете express, вы можете получить доступ к значению языка, используя req.query.language из вашего обработчика маршрута.

0 голосов
/ 22 апреля 2019

Вы можете использовать метод GET с параметрами в маршруте.

Например:

Маршрут: http://your-app-domain/route?language=en

Получение языка:

...
app.get('/route', (req, res) => {
  const language = req.query.language;
  console.log(language); // en
});

http://expressjs.com/pt-br/api.html#express.urlencoded

Надеюсь, это поможет!

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