在使用 express-subdomain 引用单独的路由文件时遇到问题

having trouble referencing separate routes file with express-subdomain

我正在尝试使用 Express 3.0 和 express-subdomain 向现有节点应用程序添加子域。

(我已将子域添加到我的主机文件中,并且工作正常。)

当前应用程序将所有路由放在与主文件相同目录下的单独 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);

关于如何解决这个问题有什么想法吗?

根据您发布的代码,我将尝试以下步骤:

  1. developerRoutes.js中,exports.developerRouteList = function(app)应该是module.exports = devRouter,而且应该在var devRouter = express.Router()之后。除非你在 developerRoutes.js 中放置多个路由器,否则你不需要在 module.exports 对象中创建一个名为 developerRouteList 的子对象。此外,您似乎没有使用传递给 developerRoutes.jsapp 实例,因此更改它应该没问题。
  2. main.js中,现在你可以试试app.use(subdomain('test-developer', developerRoutes));

express-subdomain 的作者

我已经在上一期中回答了这个问题 - 请参阅 https://github.com/bmullan91/express-subdomain/issues/4。我可能应该将其添加到自述文件中,因为仍有一些人在使用 v3。