2014-11-22 123 views
1

我是新来的节点。我的大多数服务器包括require语句,中间件和类似的东西激活节点功能

app.get('/page.html', function (req, res, next){ 
    res.render("page.html"); 
}); 

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

回答

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会坚持他们,将他们保存在某处。

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

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

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

我希望这是有道理的,因为我的拇指现在已经不疼了:-)

+1

我现在对您的拇指感到有点内疚。当你的想法出现时,我已经完成了一半的答案。 :) – Avaq 2014-11-22 20:16:20

+0

而你的回答和我的很好地补充了对方,所以努力没有浪费:-) – Zlatko 2014-11-22 20:23:29

2

是否每个连接上运行从,就像整个服务器脚本要求语句结束了吗?

甲节点应用程序是一个持续的过程。当你启动脚本时,脚本将运行,包括require语句,在这段时间(启动时间),你将声明状态和注册回调(例如,你正在用app.get(..)做什么)。

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


如何触发从我的网页上点击一个按钮的功能?

在页面上执行的JavaScript(因此能够响应用户“点击”等)与在服务器上运行的JavaScript不同(在Node中)。为了让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.'); 
});