将数据从客户端javascript文件发送到服务器javascript文件(node.js或其他)并获取响应



TL;DR:如何将数据从客户端javascript发送到服务器端javascript文件(node.js或其他文件(,在那里接收数据(并使用它做一些事情(,然后将数据发送回客户端javascript文件以供进一步使用?

问题的完整描述

有一个带有表单的HTML页面,myjavascript.js从中收集用户输入并在客户端处理(使用FormData(。然后myjavascript.js通过以下方式将处理后的输入发送到myphp.php(服务器端(:

myjavascript.js:

ajax = new XMLHttpRequest();
ajax.open("POST", "../../myphp.php",false);
ajax.send(formdata);
return ajax.responseText;

数据(formdata(然后由myphp.php接收,经过一些进一步的处理,然后发送回myjavascript.js:。。

myphp.php:

$fieldOne = $_POST["fieldOne"];
$fieldTwo = $_POST["fieldTwo"];
...
($fieldOne, $fieldTwo etc. are processed, and the result is assigned to $results)
...
echo json_encode($results);
exit();

其中它由return ajax.responseText;返回(如上面的myjavascript.js代码(。然后这些数据显示在HTML页面等上

问题

我以前常这样做。现在我想使用服务器端javascript(比如myserver.js(而不是myphp.php。我有处理myserver.js中数据的代码,我只是不知道如何从myjavascript.js接收数据并发回响应。这可能吗?如果可能,它的代码应该是什么样子?一般来说,我不太理解在服务器端javascript中接收POST数据(并将响应发送回(的机制与PHP的机制有何不同。感谢您的建议和意见。

在PHP中,web服务器部分通常由其他框架实现,您的PHP脚本由该框架调用。例如,Apache模块可能会调用您的blah.php脚本,传入的web请求是针对/blah.php的。这意味着PHP开发人员通常从浏览器调用PHP文件的角度来考虑,但实际上它比幕后更复杂。

相反,Node.js的典型设置是JavaScript代码本身实现web服务器侦听器。您使用服务器JS脚本运行node,然后该脚本启动服务器。例如,内置的http模块允许您通过createServer:实现一个低级别的HTTP侦听器

const { createServer } = require('http');
const { once } = require('events');
const server = createServer(async (req, res) => {
const chunks = [];
req.on('data', chunk => chunks.push(chunk));
await once(req, 'end');
const body = JSON.parse(chunks.join(''));
// Do stuff with the body
res.statusCode = 200;
res.end('Success!');
});
server.listen(8080);
console.log('Server is listening at http://0.0.0.0:8080/');

因此,基本上,不要再考虑客户端JavaScript文件向服务器端JavaScript文件发送东西的问题,而是考虑浏览器向HTTP服务器发送HTTP请求的问题。

我建议您使用像expresskoa这样的框架来构建服务器,因为它可以让您更容易地为请求配置特定于路由的处理,并且它们能够使用预构建的";中间件";做一些常见的事情,比如JSON正文解析等等。

您需要使用node js

express js安装节点js后运行以下命令:

$ npm install express --save
$ npm install body-parser --save

myserver.js

const express = require('express')
const app = express()
const port = 3000
const bodyParser = require('body-parser')
app.use( bodyParser.json() )
app.use(bodyParser.urlencoded({
extended: true
}))
app.get('/', function (req, res) {
console.log(req.body.fieldOne)
console.log(req.body.fieldTwo)
res.send('Hello World!')
})
app.listen(port, () => console.log(`Example app listening on port ${port}!`))

然后,使用以下命令运行服务器:

$ node myserver.js

最新更新