如何在 Node.js 中从客户端(例如 html 按钮 onclick)调用服务器端函数?

Posted

技术标签:

【中文标题】如何在 Node.js 中从客户端(例如 html 按钮 onclick)调用服务器端函数?【英文标题】:How to call a server side function from client side (e.g. html button onclick) in Node.js? 【发布时间】:2013-09-20 19:48:21 【问题描述】:

我需要一个完整的 Node.js 基本示例,从(客户端)html 按钮 onclick 事件调用服务器端函数,就像在 ASP.NET 和 C# 中一样。

我是 Node.js 的新手并使用 Express 框架。

有什么帮助吗?

改进的问题:

//服务器端:

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var app = express();

// all environments

app.set('views',__dirname + '/views');
app.set('port', process.env.PORT || 3000);
app.engine('html', require('ejs').renderFile);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
app.set('view engine', 'html');

app.use(app.router);

app.get("/",function(req,res)

  res.render('home.html');
);


// development only
if ('development' == app.get('env')) 
  app.use(express.errorHandler());


app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function()
  console.log('Express server listening on port ' + app.get('port'));
);

//客户端

 <input type="button" onclick="" />  <--just want to call the serverside function from here-->

【问题讨论】:

您需要通过 HTTP 与服务器通信,使用 AJAX 或表单 POST 或 websockets。 我google了很多,但找不到正确的例子, @SaadAbdullah:你不明白什么? Node.js 是一个更薄的 Web 平台;您需要了解底层技术(HTML 和 HTTP)。 @SLaks:谢谢您的回复先生,我正在为我的网络编程学期项目制作***的副本,(意味着,我是 node.js 的菜鸟)我被困在某个时刻,我只想知道如何从客户端事件中使用服务器端功能? @SaadAbdullah:您不能从另一台计算机调用一台计算机上的函数。您需要通过网络发送请求。 【参考方案1】:

这是一个使用 Express 和 HTML 表单的示例。

var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);

app.use(express.bodyParser());
app.post('/', function(req, res) 
  console.log(req.body);
  res.send(200);
);

server.listen(process.env.PORT, process.env.IP);

上面的代码将启动一个 Express 实例,它是 Node.js 的 Web 应用程序框架。 bodyParser() 模块用于解析请求体,因此您可以读取帖子数据。然后它将侦听路由 / 上的 POST 请求。

<form method="post" action="/">
  <input type="test" name="field1">
  <input type="test" name="field2">
  <input type="submit">
</form>

如果您在req.body 中为路由/ 提交该表单,您将得到结果:

 field1: 'form contents', field2: 'second field contents' 

要运行一个函数,只需将它放在POST 处理程序中,如下所示:

var foo = function() 
  // do something
;

app.post('/', function(req, res) 
  console.log(req.body);
  res.send(200);

  // sending a response does not pause the function
  foo();
);

如果您不想使用 Express,那么您可以使用原生 HTTP 模块,但您必须自己解析 HTTP 请求正文。

var http = require('http');
http.createServer(function(request, response) 
  if (request.method === 'POST') 
    var data = '';

    request.on('data', function(chunk) 
      data += chunk;
    );

    request.on('end', function() 
      // parse the data
      foo();
    );
  
).listen(80);

【讨论】:

app.get 函数在哪里? 这是一个示例,不是完整的解决方案。您可以在文档中了解如何使用它:expressjs.com 我检查了API,我找不到任何关于调用服务器端函数的例子。但是谢谢你的回答:) app.use(bodyParser()); //现已弃用 现在需要单独调用方法 app.use(bodyParser.urlencoded()); app.use(bodyParser.json()); - ***.com/questions/24330014/… 没有示例显示如何在 Express 提供的 onClick 语句中命名脚本。

以上是关于如何在 Node.js 中从客户端(例如 html 按钮 onclick)调用服务器端函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node.js 中从请求参数获取经过身份验证的用户到 socket.io

如何在 Node.js 中从不同的应用程序注入模块

在js中从mysql中查询内容

node.js 将客户端渲染代码发送到服务器端,例如发布请求

如何使用 Node.js 动态生成 Html 内容? [复制]

在 node.js 中从字符串创建一个文本文件并将其作为响应流式传输