繁体   English   中英

如何在express.static旁边使用中间件?

[英]How can I use middleware alongside express.static?

我有一个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发送到静态内容。

有谁知道如何为所有内容使用中间件,包括静态内容? 最终我将提供两个文件夹,一个公共文件夹和一个私人文件夹(通过护照验证)。

我已经把你的问题的最小实现放在一起,它对我有用:

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,那么您可能偶然发现了一个已修复的错误,类似于错误。 如果更新无法解决您的问题,那么我建议您更新您的问题以包含更多代码,可能是一个可运行但最小的问题示例。 希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM