3

我正在使用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

谢谢

4

4 回答 4

9

这是它的外观。你必须把中间件放在上面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")
于 2012-09-24T17:58:46.760 回答
3

您可以尝试使用 DEBUG 标志运行脚本以查看发生了什么。Express 具有调试语句,显示已定义哪些路由以及如何处理请求。

$ DEBUG=* node app.js
于 2012-09-22T18:47:54.473 回答
1

将 app.use 移到顶部......它应该可以工作。:)

于 2012-09-24T16:29:16.650 回答
0

您必须将中间件放在app.configure()部分之上。

于 2012-09-24T15:37:30.227 回答