Node.js 带expresss的中间件订单
我将Express中间件配置为:Node.js 带expresss的中间件订单,node.js,express,Node.js,Express,我将Express中间件配置为: var clientDir = path.join(__dirname, 'public'); app.use(app.router); app.use(express.static(clientDir)); app.use('/js', express.static(clientDir + '/js')); app.use('/css', express.static(clientDir + '/css')); app.use('/partials', exp
var clientDir = path.join(__dirname, 'public');
app.use(app.router);
app.use(express.static(clientDir));
app.use('/js', express.static(clientDir + '/js'));
app.use('/css', express.static(clientDir + '/css'));
app.use('/partials', express.static(clientDir + '/partials'));
app.use('/lib', express.static(clientDir + '/lib'));
app.all('/*', function (req, res, next) {
// Just send the index.html for other files to support HTML5Mode
console.log("/*");
res.sendfile('index.html', {
root : clientDir
});
});
当我请求/lib/require.js
时,index.html的内容被提供。据我所知,请求应该由app.use('/lib',express.static(clientDir+'/lib'))处理代码>
基本上,我希望首先处理我的路由,然后是静态内容,最后,如果请求既不是路由,也不是静态内容,服务器应该提供index.html
,以了解您的陈述:
app.use('/js', express.static(clientDir + '/js'));
app.use('/css', express.static(clientDir + '/css'));
app.use('/partials', express.static(clientDir + '/partials'));
app.use('/lib', express.static(clientDir + '/lib'));
是为了提供静态内容,这正是你的应用程序所使用的(express.static(clientDir))
无论如何都能做到的
我猜你把app.use('/lib',…)
用于app.get()
,app.post()
等
后者是构造app.router
的语句,这是您希望处理lib/require.js
请求的语句
前者指的是“挂载”,不影响应用程序路由器
。挂载告诉Express,当对/lib
的请求到达时,它应该由Express.static(clientDir+'/lib')
处理,并且处理程序接收到前缀为/lib
的请求。在您的情况下,考虑到您的系统中显然有文件clientDir+'/lib/require.js'
,您希望能够提供该文件,但问题是app.use('/lib',express.static(clientDir+'/lib'))
语句实际上只是在以下语句之后出现的另一个中间件语句:
app.use(app.router);
app.use(express.static(clientDir));
实际上,你的app.router
中唯一的东西就是app.all(“/*”,…)
,这就解释了为什么无论你要求什么,都会提供index.html
要解决您的问题,只需移除块:
app.use('/js', express.static(clientDir + '/js'));
app.use('/css', express.static(clientDir + '/css'));
app.use('/partials', express.static(clientDir + '/partials'));
app.use('/lib', express.static(clientDir + '/lib'));
所有这些都将由express.static
中间件处理,如果您希望index.html
用于其他一切,请维护app.all()
,但将前两个中间件的顺序颠倒:
app.use(express.static(clientDir));
app.use(app.router);
这样,所有存在的静态文件都将被提供,如果不是静态文件,那么应用程序路由器将使用通用的app.all
路由到服务器index.html
作为默认设置
有关安装的详细信息,请参阅