Отправка данных из файла клиента javascript в файл сервера javascript (node.js или другой) и получение ответа обратно - PullRequest
0 голосов
/ 27 марта 2020

TL; DR: Как я могу отправить данные из клиентской javascript в серверный файл javascript (node.js или любой другой), получить их там (и сделать кое-что с он), а затем отправить его обратно в файл javascript на стороне клиента для дальнейшего использования?

Полное описание проблемы

Существует страница HTML с форма, из которой myjavascript.js собирает пользовательский ввод и обрабатывает его на стороне клиента (используя FormData). Затем myjavascript.js отправляет обработанные данные на myphp.php (на стороне сервера) следующим образом:

my javascript. js:

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

Данные (формданные) затем принимаются myphp.php, подвергаются некоторой дальнейшей обработке, а затем отправляются обратно в myjavascript.js: ..

my php. 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 et c.

Вопрос

Я раньше делал это раньше. Теперь я хотел бы использовать серверную javascript (скажем, myserver.js) вместо myphp.php. У меня есть код для обработки данных в myserver.js, я просто не понимаю, как получить данные из myjavascript.js и отправить ответ обратно. Возможно ли это, и если да, то как должен выглядеть код для него? Вообще, я не совсем понимаю, чем механизм получения POST-данных на стороне сервера javascript (и отправки ответа обратно) отличается от PHP. Спасибо за любые предложения и комментарии.

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Вам необходимо использовать node js и express 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
0 голосов
/ 27 марта 2020

В PHP часть веб-сервера обычно реализуется какой-то другой платформой, и ваши PHP сценарии вызываются этой платформой. Например, модуль Apache может назвать ваш входящий веб-запрос сценария blah.php для /blah.php. Это означает, что PHP разработчики часто думают в терминах браузера, вызывающего файл PHP, но на самом деле это сложнее, чем закулисное.

Типичная настройка Node.js, напротив, заключается в том, что JavaScript сам код реализует слушатель веб-сервера. Вы создаете серверный скрипт JS, и этот скрипт запускает сервер. Например, встроенный модуль http позволяет реализовать низкоуровневый HTTP-прослушиватель через createServer:

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-сервер.

Я бы порекомендовал использовать вместо этого фреймворк, например express или koa для построения вашего сервера, поскольку он позволяет вам более легко настраивать обработку маршрутов c для запросов, и они могут использовать предварительно созданные «middlewares» для выполнения таких общих вещей, как JSON разбор тела и многое другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...