我正在尝试使用Express 3.0和express-subdomain向现有节点应用添加子域。
(我已将子域添加到我的hosts文件中,并且工作正常。)
当前应用程序将所有路由放在与主文件相同的目录中的单独routes.js文件中,并且它的调用方式如下:
var routes = require("./routes")
//other stuff
routes.routeList(app);
我尝试了很多种方法来使用
app.use(subdomain('test-developer', [router]));
语法,我无法弄明白。
我试过
var router = require("./routes.js");
app.use(subdomain('test-developer', router));
我得到一个错误,如“第二个参数必须是一个处理fn(req,res,next)参数的函数。”
这里有一些代码:
//the developerRoutes.js file
var express = require('express');
exports.developerRouteList = function(app) {
var devRouter = express.Router();
devRouter.get('/', function(req, res) {
res.send('hi!');
});
}
并从main.js文件:
var developerRoutes = require('./developerRoutes');
//...
var app = express();
app.use(subdomain('test-developer', developerRoutes.developerRouteList));
//force https with this:
app.enable('trust proxy');
app.configure(function() {
app.use(function (req, res, next){
var hostname = ( req.headers.host.match(/:/g) ) ? req.headers.host.slice( 0, req.headers.host.indexOf(":") ) : req.headers.host
console.log(hostname)
if ((hostname === 'localhost') || (hostname === 'test-developer.localhost') || req.secure) {
// request was via https, so do no special handling
next();
} else {
// request was via http, so redirect to https
res.redirect('https://' + req.headers.host + req.url);
}
});
app.use(express.bodyParser());
app.use(express.cookieParser('secret'));
app.use(function(req, res, next){
session = require("./routes/includes/session.js");
next();
});
app.use(express.static('./public'));
app.use(app.router);
});
app.engine('ejs', engine);
app.set('views',__dirname + '/views');
app.set('view engine', 'ejs');
multiLess.configure(__dirname + '/static/less/', parentDirectory + 'public/css/',['main.less'],0);
routes.routeList(app);
有关如何解决此问题的任何想法?
答案 0 :(得分:1)
根据您发布的代码,我会尝试以下步骤:
developerRoutes.js
中,exports.developerRouteList = function(app)
应为module.exports = devRouter
,且应在var devRouter = express.Router()
之后。除非您在developerRoutes.js
中放置多个路由器,否则您无需在developerRouteList
对象中创建名为module.exports
的子对象。此外,您似乎并未使用传递给app
的{{1}}实例,因此可以更改此内容。developerRoutes.js
,您现在可以尝试main.js
答案 1 :(得分:1)
express-subdomain的作者
我在之前的一期中回答了这个问题 - 请参阅https://github.com/bmullan91/express-subdomain/issues/4。我应该把它添加到自述文件中,因为还有一些人使用v3。