我正在使用 Express 3.x 并且当我放置
express = require("express")
routes = require("./routes")
http = require("http")
path = require("path")
app = express()
app.configure ->
app.set "port", process.env.PORT or 3000
app.set "views", __dirname + "/views"
app.set "view engine", "jade"
app.use express.favicon()
app.use express.logger("dev")
app.use express.bodyParser()
app.use express.methodOverride()
app.use app.router
app.use express.static(path.join(__dirname, "public"))
app.use (req,res,next)->
res.locals.name = "Jesse"
next()
app.use "/", (req,res,next)->
res.locals.name = "Jesse"
app.configure "development", ->
app.use express.errorHandler()
app.get "/", routes.index
http.createServer(app).listen app.get("port"), ->
console.log "Express server listening on port " + app.get("port")
我的观点是
extends layout
block content
h1= title
p Welcome to #{title}
p Hello Mr #{name}
我希望每次收到 get 请求时都会调用第一个中间件 (app.use),但它并没有发生。 express2.x有什么变化吗?
这是来自 express 3.x 目录并且有注释
https://github.com/visionmedia/express/blob/master/examples/view-locals/index.js
谢谢
最佳答案
它应该是这样的。你必须把中间件放在 app.router
express = require("express")
routes = require("./routes")
http = require("http")
path = require("path")
app = express()
app.set "port", process.env.PORT or 3000
app.set "views", __dirname + "/views"
app.set "view engine", "jade"
app.use express.favicon()
app.use express.logger("dev")
app.use express.bodyParser()
app.use express.methodOverride()
app.use (req,res,next)->
res.locals.name = "Jesse"
next()
app.use app.router
app.use express.static(path.join(__dirname, "public"))
app.configure "development", ->
app.use express.errorHandler()
app.get "/", routes.index
http.createServer(app).listen app.get("port"), ->
console.log "Express server listening on port " + app.get("port")
关于node.js - nodejs express 3.0 app.use 是否被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12546370/