【问题标题】:How can I use middleware alongside express.static?如何在 express.static 旁边使用中间件?
【发布时间】:2014-04-16 10:53:31
【问题描述】:

我有一个 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 调用之后使用中间件,它可以正常工作 - 但不会为静态内容调用。我需要设置中间件,以便任何 flash 消息(来自 connect flash)都可以作为 cookie 发送到静态内容。

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

【问题讨论】:

    标签: node.js express middleware


    【解决方案1】:

    我已经整理了您问题的最小实现,它对我有用:

    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。如果更新不能解决您的问题,那么我建议您更新您的问题以包含更多代码,也许是一个可运行但最小的问题示例。希望这会有所帮助!

    【讨论】:

    • 嗨 @Cosmic Flame 感谢您的回答 - 这似乎是一个版本问题!
    • 很高兴能帮上忙!我想我遇到了完全相同的问题,这让我认为这是一个版本问题。
    猜你喜欢
    • 2018-06-10
    • 1970-01-01
    • 2012-07-13
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2014-03-09
    相关资源
    最近更新 更多