我有一个nodejs应用程序,通过express.static提供单页应用程序。这一切都很好,但是当我尝试创建一个简单的中间件时:
app.use(function(req, res, next){
console.log('%s %s', req.method, req.url);
next();
});
app.use(express.static(path.join(__dirname, 'client')));
任何从客户端加载内容的尝试都失败了:
TypeError: Object function (req, res, next){
console.log('%s %s', req.method, req.url);
next();
} has no method 'concat'
如果我在express.static调用之后使用中间件它可以正常工作 - 但是没有调用静态内容。我需要设置中间件,以便任何闪存消息(来自连接闪存)都可以作为cookie发送到静态内容。
有谁知道如何为所有内容使用中间件,包括静态内容?最终,我将提供两个文件夹,一个公共文件夹和一个私人文件夹(通过护照验证)。
答案 0 :(得分:3)
我已经整理了一个问题的最小实现,它对我有用:
var express = require('express')
var path = require('path')
var app = express()
app.use(function(req, res, next) {
console.log('Middleware says %s %s', req.method, req.url);
next();
})
app.use(express.static(path.join(__dirname, 'client')))
app.listen(8080, function() {
console.log('server is ready')
})
然后我启动了服务器
$ node so.js
server is ready
并在我的浏览器中加载http://localhost:8080/foo.txt
Middleware says GET /foo.txt
我正在使用Express 3.6.0 - 如果您使用的是较旧版本的Express,那么您可能偶然发现了一个已修复的错误,类似于this one。如果更新无法解决您的问题,那么我建议您更新您的问题以包含更多代码,可能是一个可运行但最小的问题示例。希望这有帮助!