【问题标题】:nodejs express 3.0 app.use does it get callednodejs express 3.0 app.use 是否被调用
【发布时间】:2012-09-22 18:03:42
【问题描述】:

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

谢谢

【问题讨论】:

  • 1) 您的缩进已关闭 2) 您可能在这两个 app.use 之前调用了 app.routerapp[VERB]
  • 标识在这里关闭...不在代码中..&我在 app.get 之前调用 app.use

标签: node.js express


【解决方案1】:

这是它的外观。你必须把中间件放在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")

【讨论】:

  • 我在文档中的任何地方都找不到这个。您是否也通过反复试验发现了这一点?
【解决方案2】:

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

$ DEBUG=* node app.js

【讨论】:

  • 如果手写笔向您发送垃圾邮件,它的DEBUG=express:*,connect:*
  • 实际上,请参阅debug 模块以了解有关如何使用它的更多信息。 DEBUG=*,-stylus:* 将省略所有手写笔,但保留其他所有内容,而不仅仅是表达和连接
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 不。我试过了......更奇怪......如果你使用 res.locals.name 它不会被传递给视图!当地人不喜欢名称,您可以使用 res.local.fname 或任何其他变量
    猜你喜欢
    • 2016-10-25
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多