为什么要为我的所有路由处理程序添加前缀?

我正在创build一个应用程序,使用运行在IISNode 节点 (即在Windows)上的Expressjs

我开始设置非常像我见过的所有expressjs例子:

backend.configure(function() { backend.register('html', { compile: function(str, options) { return function(locals) { return str; }; } }); backend.set('views', __dirname + '/views'); backend.set('view engine', 'html'); backend.set('view options', { layout: false }); backend.use(express.bodyParser()); backend.use(backend.router); backend.use(express.static(__dirname + '/public')); }); 

比方说我的网站运行在localhost:// mysite。 我不得不创build我所有的路由处理程序如下。

  backend.get('/mysite/index', function(req, res, next) { return res.render('index'); }); 

即我不得不以“mysite”为前缀。 非我见过的例子都需要这个。 这是与IISNode或其他我没有configuration的东西?

开箱即用,这确实是你如何做到的。 您可以查看快速资源 ,实现资源丰富的路由 – 但是它自带的警告,至less在涉及路由特定的中间件时。

如果只是一个path,我想你可以用app.set("basepath", "mysite")

我一直在寻找这个function,但对于API路由,而不是静态文件。 我做的是,当我初始化路由器时,我添加了安装path。 所以我的configuration看起来像这样

 //Default configuration app.configure(function(){ app.use(express.compress()); app.use(express.logger('dev')); app.set('json spaces',0); app.use(express.limit('2mb')); app.use(express.bodyParser()); app.use('/api', app.router); // <--- app.use(function(err, req, res, callback){ res.json(err.code, {}); }); }); 

调用路由器时注意'/ api'

为避免在使用iisnode在IIS中进行部署时必须修改快速应用程序,您需要部署到IIS网站的根目录,而不是站点下的虚拟目录。