我是新来的节点。我的大多数服务器包括require语句,中间件和类似的东西激活节点功能
app.get('/page.html', function (req, res, next){
res.render("page.html");
});
如何通过点击我的网页上的按钮来触发功能?整个服务器脚本是否在每个连接上运行,例如从require语句到最后?
我是新来的节点。我的大多数服务器包括require语句,中间件和类似的东西激活节点功能
app.get('/page.html', function (req, res, next){
res.render("page.html");
});
如何通过点击我的网页上的按钮来触发功能?整个服务器脚本是否在每个连接上运行,例如从require语句到最后?
触发点击操作是前端通常需要启动的事情。您将向您的后端路由发起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失败时会被调用。
因此,在每个请求中,只有少数预定义的函数可以运行。你甚至可以在请求之间保存一些状态,比如记录成功的呼叫。
我希望这是有道理的,因为我的拇指现在已经不疼了:-)
是否每个连接上运行从,就像整个服务器脚本要求语句结束了吗?
号
甲节点应用程序是一个持续的过程。当你启动脚本时,脚本将运行,包括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.');
});
我现在对您的拇指感到有点内疚。当你的想法出现时,我已经完成了一半的答案。 :) – Avaq 2014-11-22 20:16:20
而你的回答和我的很好地补充了对方,所以努力没有浪费:-) – Zlatko 2014-11-22 20:23:29