激活节点功能

时间:2014-11-22 17:19:40

标签: node.js httpserver

我是Node的新手。我的大部分服务器都包含require语句,中间件和

之类的东西
app.get('/page.html', function (req, res, next){
    res.render("page.html");
});

如何通过点击我的网页上的按钮来触发功能?整个服务器脚本是否在每个连接上运行,例如从require语句到结束?

2 个答案:

答案 0 :(得分:2)

  

整个服务器脚本是否在每个连接上运行,例如从require语句到结束?

没有。

Node应用程序是一个持续的过程。当你启动它时,脚本将运行,包括require语句,并且在那段时间(启动时间),你将声明状态并注册回调(这是你用app.get(..)做的事情。例如)。

在启动时间之后,只要有回调等待事件,应用程序就会继续运行。在网络服务器中,这可能是永远的,因为你总是在等待"请求"事件。当请求事件触发时(由于传入连接),将调用回调(如示例中的回调),并且这是唯一一次在每个连接上反复运行的事情。


  

如何通过点击我的网页上的按钮来触发功能?

在页面上执行的JavaScript(因此能够响应用户"点击"等等)与您的服务器(在Node中)上运行的JavaScript不同。为了在客户端(浏览器)上执行JavaScript,您必须将其包含在HTML页面中:

<head>
  <script type="text/javascript" src="http://my-server.example.com/client-script.js"></script>
</head>

并将其托管在您的服务器上:

app.get('/client-script.js', function(req, res){
  res.sendFile('assets/client-script.js');
});

在该脚本中,您可以按下按钮。如果您想让服务器知道按下按钮,您必须向服务器发送另一个请求。通过将用户重定向到另一个页面,或发送AJAX请求。然后,您必须在服务器上有另一条路径来侦听该特定请求,例如:

app.post('/button-was-pressed', function(req, res){
  console.log('We have a winner.');
});

答案 1 :(得分:1)

触发点击操作是前端通常需要启动的操作。您可以向后端路由之一发出Ajax请求。让我们有一个像

这样的路线
var successfulCalls = 0;    
app.get('/my-action', function(req, res) {

     // you can do your action here
     //like calling a database or something
     // then you need to, eventually, close the request.
     db.get('somedata')
     .then(function(results) {

         res.json(results);
         successfulCalls++;
     })
     // also handle errors
     .catch(function(err) {
         res.status(500);
         res.end();
      });
});

那里有三个功能。 Express会坚持他们,在某处保存refs。

当请求进入时,当它与/my-action匹配时,它将调用第一个函数。 每次请求与url匹配时,都会调用此函数。

第二个函数只在db调用成功时调用,第三个函数在db失败时调用。

因此,在每个请求中,只会运行一些预定义的函数。您甚至可以在请求之间保存一些状态,例如记录成功的呼叫。

我希望这是有道理的,因为我的拇指现在受伤了: - )