Node Js Express迭代数组

时间:2014-06-17 01:38:38

标签: javascript node.js express hogan.js

我已将shell命令的STDOUT拆分为数组,并将其传递给带有express的hogan视图引擎。

以下是来自路由器文件 - index.js

/* Test Shell Execute. */
router.get('/shell', function(req, res){
  exec('ls -1', function (error, stdout, stderr) {
       result = stdout.toString().split("\n");
       res.render('shell', { title: "File Explorer",
          array1: result[0],
          array2: result[1],
          array3: result[2],
          array4: result[3],
          array5: result[4],
          error: error,
          stderr: stderr 
     });
  });
});

这样工作正常,但是我不想手动发送数组中的每个项目,而是想在视图结束时遍历项目,然后输出。但是我使用的是Hogan视图引擎,它似乎根本无法识别脚本标记。

这是我的视图shell.hjs文件。

<!DOCTYPE html>
<html>
  <head>
    <title>{{ title }}</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>{{ title }}</h1>
    <p>Welcome to {{ title }}</p>
     <p>Array1 =  {{ array1 }}</p>
     <p>Array2 =  {{ array2 }}</p>
     <p>Array3 =  {{ array3 }}</p>
     <p>Array4 =  {{ array4 }}</p>
     <script>
     for(var i = 0; i > result.length; i++  ) {
         document.write('<p>' + result[i] + '</p>')
     }
     </script>
  </body>
</html>

问题:我做错了什么,最好/最简单的方法是什么?

1 个答案:

答案 0 :(得分:2)

由于hogan.js基于mustache.js,因此最好尝试将数组转换为对象。试试这个:

router.get('/shell', function(req, res){
  exec('ls -1', function (error, stdout, stderr) {
    result = stdout.split("\n"),
             filesArray = [];
    result.map(function (file, index) {
      filesArray.push({index: ++index, file: file});
    });
    res.render('shell', { title: "File Explorer",
      result: filesArray,
      error: error,
      stderr: stderr 
    });
  });
});

并且,在您的模板中:

<!DOCTYPE html>
<html>
  <head>
    <title>{{ title }}</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>{{ title }}</h1>
    <p>Welcome to {{ title }}</p>
    <ul>
      {{#result}}
      <li>Array{{index}} = {{file}}</li>
      {{/result}}
    </ul>
  </body>
</html>