node.js - express、jade、node.js、coffeescript、使用变量数组和 for 循环设置路由

标签 node.js coffeescript express pug

我刚刚继承了一个用coffescript编写的node.js/express项目,并使用jade来渲染 View 。在我的views文件夹中,我有大约20个jade文件需要设置路由。而不是像这样一遍又一遍地重复自己(目前工作得很好):

app.get '/html/404.html', (req,res) ->
  res.render '404',

app.get '/html/503.html', (req,res) ->
  res.render '503', 

app.get '/html/foo.html', (req,res) ->
  res.render 'foo', 

我更愿意通过创建一个 url 数组并使用 for 循环对其进行迭代来减少困惑,如下所示:

urls = [
  "404"
  "503"
  "foo"
]

for url in urls
  app.get "/html/#{url}.html", (req,res) ->
    res.render "#{url}",

不幸的是,这不起作用。有什么建议吗?

最佳答案

这是在 JavaScript 中定义循环中的闭包时发生的一个经典问题:您希望路由函数中的 url 值是定义该函数时的值,但是事实上,它就是循环中最后一个值。毕竟只有一个 url 变量。

解决方法是在外部闭包中“捕获”该变量,这就是 CoffeeScript 具有 do 语法的原因:

for url in urls
  do (url) ->
    app.get "/html/#{url}.html", (req,res) ->
      res.render "#{url}"

有关此内容的更多信息,请参阅我的 PragPub 文章 A CoffeeScript Intervention .

(话虽如此,Arnaud 建议在路由中使用 Express 参数是一个更优雅的解决方案。如果您可以完全避免循环,那就这样做!)

关于node.js - express、jade、node.js、coffeescript、使用变量数组和 for 循环设置路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11051989/

相关文章:

node.js - 在登录屏幕中禁用 stormpath 的创建帐户选项

javascript - 如何从渲染进程的主进程访问对象 [Electron]

node.js - var 和 const 有什么区别?

ruby - coffeescript 中的 stub 函数

javascript - 将自定义对象的 Mongoose PUT 实现到复杂模式中时出现问题

node.js - 无法获得授权代码 : Error: self signed certificate in certificate chain

Node.js SSL 身份验证

node.js - Firebase setCustomUserClaims 始终覆盖旧的

javascript - Meteor 和 CoffeeScript : Cannot call method 'helpers' of undefined

javascript - 如何使用 CoffeeScript API 来操作 AST 并写入 .coffee 输出