嘿,我创建了一个带有电子邮件确认的小型注册脚本,我想在这里使用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引起的?
答案 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');
});
})
现在一切正常...