我是Node的新手。我的大部分服务器都包含require语句,中间件和
之类的东西app.get('/page.html', function (req, res, next){
res.render("page.html");
});
如何通过点击我的网页上的按钮来触发功能?整个服务器脚本是否在每个连接上运行,例如从require语句到结束?
答案 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失败时调用。
因此,在每个请求中,只会运行一些预定义的函数。您甚至可以在请求之间保存一些状态,例如记录成功的呼叫。
我希望这是有道理的,因为我的拇指现在受伤了: - )