激活节点function

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

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

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

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

没有。

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

启动时间后,只要有callback等待事件,应用程序将继续运行。 在networking服务器中,这可能是永远的,因为你总是在等待“请求”事件。 当请求事件触发时(由于传入的连接),将会调用callback(就像你的例子中的callback),这是唯一一个在每个连接上反复运行的东西。


如何通过点击我的网页上的button触发一个function?

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

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

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

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

在该脚本中,您将处理button按下。 如果你想让服务器知道button被按下了,你就必须发送另一个请求到服务器。 通过将用户redirect到另一个页面,或发送一个AJAX请求。 然后,您必须在服务器上有另一条路由来监听特定的请求,例如:

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

触发点击操作是前端通常需要启动的事情。 你会发出一个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(); }); }); 

那里有三个function。 快递将坚持到他们,保存在他们的地方。

当一个请求进来,当它匹配/my-action ,它会调用第一个function。 每当请求匹配的URL,这个函数将被调用。

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

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

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