Nodejs / Express - поддомен автоматически перенаправляет в корневой домен - PullRequest
0 голосов
/ 25 июня 2018

Эй, я создал небольшой сценарий регистрации с подтверждением по электронной почте, и я хотел использовать здесь экспресс-субдомен. Все работает отлично, за исключением части подтверждения. Если я нажимаю ссылку в электронном письме с подтверждением, оно перенаправляет меня на поддомен подтверждения (http://login.myapp.com:5000/reg/confirm?id=xxx) ... и здесь возникает проблема. Сервер должен получить запрос get с идентификатором и обновить базу данных:

loginapp.get('/reg/confirm', function (req, res) {
  var unid = req.query.id;
  console.log('before update');
  db.confirmAccount(unid, function (error, unid) {
   if (error) throw error;
   console.log('after update');
   res.redirect('http://myapp.com:5000');
  });
})

, но вместо этого он просто автоматически перенаправляет меня на http://myapp.com:5000, даже не вдаваясь в этот код (нет выводов в консоли и БД не будет обновляться).

Конфигурация поддомена:

const express = require('express');
const subdomain = require('express-subdomain');
var app = express();
var loginapp = express.Router();

app.use(subdomain('login', loginapp));
app.listen(5000, function () {
 console.log('+++ LISTENING ON PORT 5000 +++');
});

Есть ли проблема с моим кодом или из-за субдомена express?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Я только что переименовал путь для запроса на получение от:

loginapp.get('/reg/confirm', function (req, res) {
 var unid = req.query.id;
 console.log('before update');
 console.log(unid);

 db.confirmAccount(unid, function (error, unid) {
  if (error) throw error;
  console.log('after update');
  res.redirect('http://myapp.com:5000');
 });
})

до

loginapp.get('/reg/con', function (req, res) {
 var unid = req.query.id;
 console.log('before update');
 console.log(unid);

 db.confirmAccount(unid, function (error, unid) {
  if (error) throw error;
  console.log('after update');
  res.redirect('http://myapp.com:5000');
 });
})

и теперь все отлично работает ...

0 голосов
/ 25 июня 2018

Я взял твой код и сделал небольшой тест.Мне пришлось изменить мой /etc/hosts (Windows: c:\Windows\System32\drivers\etc\hosts) следующим образом:

127.0.0.1   myapp.com
127.0.0.1   login.myapp.com

Ваш код (здесь я переместил все это в один файл):

const express = require('express');
const subdomain = require('express-subdomain');
var app = express();
var loginapp = express.Router();

loginapp.get('/', function (req, res) {
  res.send('Login is working');
  console.log('LOGIN');
})

loginapp.get('/reg/confirm', function (req, res) {
  var unid = req.query.id;
  console.log('before update');
  console.log(unid);

  db.confirmAccount(unid, function (error, unid) {
   if (error) throw error;
   console.log('after update');
   res.redirect('http://myapp.com:5000');
  });
})

app.use(subdomain('login', loginapp));

app.listen(5000, function () {
 console.log('+++ LISTENING ON PORT 5000 +++');
});

Это работает довольно хорошо (конечно, я получаю ошибку БД, но я вижу, что она решает правильный маршрут)!Так что я думаю, это не проблема в самом коде ...

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