如何在查看Onclick事件上运行child_process?

时间:2014-06-20 06:51:36

标签: javascript node.js express child-process hogan.js

我是Node js的新手,我正在使用带有hogan或小胡子的express来模仿我的观点。

我可以在我的路由文件中使用下面的代码,如下所示的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: "Shell", 
        error: error, 
        stderr: stderr,
        result: result

    });
  });
});

我想要做的是能够从我的视图中运行此命令和其他exec命令onclick事件。

当我在我的视图中尝试使用node require(" child_process")时,我得到一个javascript未定义的错误。如下所示。

<!DOCTYPE html>
<html>
  <head>
     <script>
      window.onload= function() {
        var exec = require('child_process').exec;
        exec('ls -lrt', function (error, stdout, stderr) {  
         });
    };
      </script>
    <title>{{ title }}</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>{{ title }}</h1>
    <p>Hello from {{ result }}</p>
  </body>
</html>

从路由文件运行我的所有节点代码并来回查看我的视图似乎很乏味。我显然在这里犯了一个大错,但需要一些指导。

我可以从我的视图中运行节点代码吗?如果不是最好的方法是什么?

控制台输出:

ReferenceError: require is not defined      shell:6

<!DOCTYPE html>
<html>
  <head>
      <script>
      window.onload= function() {
        var exec = require('child_process').exec;
        exec('ls -lrt', function (error, stdout, stderr) { 

1 个答案:

答案 0 :(得分:0)

跟进评论;

  • 逻辑不应放在视图中,这违背了整个MVC原则。
  • 视图上的逻辑将尝试在客户端上执行,这是 - 我假设 - 不是您的意图。
  • 至于来回传递的参数,你可以 - 如果你正在使用Express,例如 - 定义一个可以处理所有逻辑的中间件。
  • 同样,在Express中,您有reqres个对象可以附加任何您喜欢的对象。因此,实现您需要的任何东西都应该相当容易。

最后;你可以发布更多的代码,这样我们就可以更好地了解你想要做什么,我们可以提出更好的建议。