【问题标题】:Sending data from client javascript file to server javascript file (node.js or other) and getting the response back将数据从客户端 javascript 文件发送到服务器 javascript 文件(node.js 或其他)并获取响应
【发布时间】:2020-07-08 11:23:47
【问题描述】:

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 的机制有何不同。感谢您的任何建议和cmets。

【问题讨论】:

  • “在服务器端 javascript 中接收 POST 数据(并发送回响应)的机制与 PHP 不同”——它通常不会除了放置东西的名称之外,但是具体情况取决于您用于编写服务器端 JS 的库。例如Express 与 Classic ASP 非常不同。

标签: javascript node.js ajax post server


【解决方案1】:

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

相比之下,典型的 Node.js 设置是 JavaScript 代码本身实现 Web 服务器侦听器。您使用服务器 JS 脚本运行节点,然后该脚本启动服务器。例如,内置的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 正文解析等等。

【讨论】:

  • 感谢您的详细解释。关于客户端 javascript,我是否仍然可以像使用 PHP 一样使用 XMLHttpRequest,或者现在我必须切换到 fetch 方法或类似方法?
  • 你可以使用任何一个。无论如何,服务器都会收到一个 HTTP 请求。
【解决方案2】:

你需要使用node jsexpress js,这样你才能轻松达到你的目标。

安装完node 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2015-05-02
    • 2018-11-08
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多