Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
express、jade、node.js、coffeescript,使用变量数组和for循环设置路由_Node.js_Coffeescript_Express_Pug - Fatal编程技术网

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

express、jade、node.js、coffeescript,使用变量数组和for循环设置路由,node.js,coffeescript,express,pug,Node.js,Coffeescript,Express,Pug,我刚刚继承了一个用coffeescript编写的node.js/express项目,并使用jade渲染视图。在我的视图文件夹中,我有大约20个需要设置路由的jade文件。而不是像这样一遍又一遍地重复我自己(目前效果很好): 我希望通过创建一个URL数组并使用for循环对其进行迭代来减少混乱,如下所示: urls = [ "404" "503" "foo" ] for url in urls app.get "/html/#{url}.html", (req,res) ->

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

我希望通过创建一个URL数组并使用for循环对其进行迭代来减少混乱,如下所示:

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

for url in urls
  app.get "/html/#{url}.html", (req,res) ->
    res.render "#{url}",
不幸的是,这不起作用。有什么建议吗?

快速响应:

for url in urls
  app.get "/html/#{url}.html", (req,res) ->
    res.render req.params.url
快速响应:

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

这是在JavaScript中定义循环中的闭包时出现的一个典型问题:您希望route函数中的
url
值与定义该函数时的值相同,但实际上,它与循环中的最后一个值相同。毕竟,只有一个
url
变量

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

for url in urls
  do (url) ->
    app.get "/html/#{url}.html", (req,res) ->
      res.render "#{url}"
有关这方面的更多信息,请参阅我的PragPub文章


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

这是在JavaScript中定义循环中的闭包时出现的一个典型问题:您希望路由函数中的
url
值与定义该函数时的值相同,但实际上,它与循环中的最后一个值相同。毕竟,只有一个
url
变量

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

for url in urls
  do (url) ->
    app.get "/html/#{url}.html", (req,res) ->
      res.render "#{url}"
有关这方面的更多信息,请参阅我的PragPub文章


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

到底什么不起作用,您有没有收到任何错误?到底什么不起作用,您有没有收到任何错误?感谢您的快速响应,但这似乎不起作用:(Arnaud,你把CoffeeScript的字符串插值与Express的参数插值混淆了,这类似于
“/html/:url”
。感谢您的快速响应,但这似乎不起作用:(Arnaud,你把CoffeeScript的字符串插值和Express的参数插值搞混了,这类似于
“/html/:url”
。谢谢Trevor!我正要发表同事关于这一点的相同答案。另一篇相关文章:谢谢Trevor!我正要发表同事关于这一点的相同答案。另一篇相关文章: