Domanda

I have a nodejs application that serves a single page app via express.static. This all works fine, however when I try and create a simple piece of middleware:

app.use(function(req, res, next){
  console.log('%s %s', req.method, req.url);
  next();
});

app.use(express.static(path.join(__dirname, 'client')));

any attempt to load content from client fails with:

TypeError: Object function (req, res, next){
  console.log('%s %s', req.method, req.url);
  next();
} has no method 'concat'

If I use the middleware after the express.static call it works fine - but isn't called for static content. I need to setup the middleware so that any flash messages (from connect flash) can be sent as cookies to the static content.

Does anyone know how I can use middleware for all content, including static content? Eventually I'll be serving two folders, one public and one private (authenticated via passport).

È stato utile?

Soluzione

I've put together a minimal implementation of your question and it works for me:

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')
})

I then started the server

$ node so.js
server is ready

and loaded http://localhost:8080/foo.txt in my browser

Middleware says GET /foo.txt

I'm using Express 3.6.0 - if you're using an older version of Express then you may well have stumbled across a bug that's since been fixed, similar to this one. If updating doesn't solve your problem then I would recommend updating your question to contain more code, perhaps a runnable, yet minimal example of the issue. Hope this helps!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top