Node.JS, ExpressJS, React и HTML JSON рендеринг - PullRequest
0 голосов
/ 16 марта 2020

Я новичок в веб-разработке и разрабатываю веб-приложение, используя сначала Node.JS для сбора информации о ресторанах с двух веб-сайтов ( Maitres Restaurateurs и Guide Michelin ), затем ExpressJS, чтобы начать приложение. Я использую функцию res.sendFile() для отображения моей страницы HTML, затем res.json() для отправки файла JSON на странице HTML.

Во-первых, вот мой рабочий каталог (это беспорядок):

src
├server.js
├index.html
├server-side
 ├bib.js
├jsx
 ├react.jsx

server.js код (где я получаю в переменной listFinal объект JSON со всей информацией о моих ресторанах, списанной с кукловода на двух сайтах. Это было сделано благодаря bib.js) :

const express = require('express');
const app = new express();
const bib = require('./server-side/bib');
var listFinal = bib.get();

app.get('/', function (req, res) {
  res.sendFile('./index.html', {root: __dirname});
  res.send(listFinal);
});

app.listen(8000, function () {
  console.log('Example app listening on port 8000!');
});

Сервер работает нормально. Однако ни мой HTML, ни мой код React не работают (я новичок в React). На моем HTML отображается только мой огромный JSON, хранящийся в переменной listFinal. Список имеет длину (или размер) 50, а вот его структура:

[{"name": "Saperlipopette ",
  "url": "www.saperlipopette1.fr",
  "address": "9 place du Théâtre, Puteaux, 92800, France",
  "price_style": "36 - 65 EUR • Cuisine moderne",
  "phone": "+33 1 41 37 00 00"},
  ...]

Мой index.html код:

<!doctype html>

<html lang="en">
<head>
  <meta charset="utf-8">

  <title>Session 3 Work - Axel Joly</title>
  <meta name="description" content="Bib gourmand + Maitre restaurateur scrappeur">
  <meta name="author" content="Axel Joly">

  <link rel="stylesheet" href="css/style.css">

</head>

<body>
  <h1>Welcome to the Bib Gourmand and Maitre Restaurateur list (made by Axel Joly):</h1>
  <div id="root">

    <ul id="list-rest">

    </ul>
  </div>
  <script src="./jsx/react.jsx"></script>
</body>
</html>

И мой react.jsx код:

var React = require('react');
var ReactDOM = require('react-dom');

export class Hello extends React.Component {
    render() {
        return (
            <h1>Welcome to React!!</h1>
        );
    }
}

ReactDOM.render(<Hello />, document.getElementById('root'));

Как объяснялось ранее, ни один из них не отображается. Когда я запускаю node server.js и go на localhost: 8000 /, я получаю это:

JSON with ExpressJS

Как вы можете видеть, есть заголовок <h1> не отображается, оба обычно отображаются с React и HTML. Кроме того, я не знаю, как " получить " мою переменную listFinal в HTML, чтобы отобразить ее как li с тегами <ul> и <li>.

1 Ответ

1 голос
/ 18 марта 2020

Как уже упоминалось в приведенном выше комментарии, вы пытаетесь запустить React через один JSX файл, и вам нужно создать приложение реакции через npx create-react-app client, которое отправит запрос на вашу серверную часть. код. Итак, я изменил ваш код, и то, что я сделал, используется concurrenlty для одновременной работы как на стороне сервера, так и на стороне клиента, это делается путем изменения package.json на стороне сервера.

"scripts": {
 "build": "next build",
 "start": "node index.js",
 "server": "node index.js",
 "client": "npm start --prefix client",
 "clientinstall": "npm install --prefix client",
 "dev": "concurrently \"npm run server\" \"npm run client\""
 }

Следующее, что вы хотите сделать, это отправить запрос со стороны вашего клиента на вашу сторону, вы можете отправить это, используя axios

    GetData = async () => {
    try {
      let response = await Axios.get(`http://localhost:8000/`, {
        crossdomain: true
      });
   console.log(response.data); // This would log the data received from your server
   //Res of Code 

, вы можете проверить работоспособность пример здесь (я пытался использовать codesandbox, но у меня возникли некоторые проблемы, поэтому вместо этого я загрузил его на Github)

, чтобы запустить проект, вы должны открыть свой терминал и запустить следующее команды

git clone https://github.com/AbdullahAbid87/APIExample.git
cd APIExample 
npm i   
cd client  
npm i  
cd ..  
npm run dev  

(Примечание: если запрос к стороне сервера не go, то это, вероятно, проблема CORS, хотя это может быть не идеальным, но самым простым способом решения было бы скачать расширение для браузера CORS Everywhere, которое должно решить его сразу)

Надеюсь, это поможет

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