Node.js / Express-子域自动重定向到根域

时间:2018-06-25 11:42:33

标签: node.js express

嘿,我创建了一个带有电子邮件确认的小型注册脚本,我想在这里使用express-subdomain。除确认部分外,其他一切正常。如果我单击确认电子邮件中的链接,它将重定向我到确认子域(http://login.myapp.com:5000/reg/confirm?id=xxx)...,这就是问题所在。服务器应接收带有ID的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-subdomain引起的?

2 个答案:

答案 0 :(得分:0)

我接受了您的代码并进行了一些测试。我必须通过添加以下内容来修改我的/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 +++');
});

这很好用(当然,我收到数据库错误,但我可以看到它解决了正确的路线)!所以我想,代码本身并不是真正的问题...

答案 1 :(得分:0)

我刚刚从以下位置重命名了get请求的路径:

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');
 });
})

现在一切正常...