我开发react应用程序有一段时间了。这个应用程序最初是使用Create-React-App命令创建的。
当我需要实现一个表单时,我来到了这个阶段,在这个阶段,如果用户无法通过自动完成输入找到一个人,他可以手动添加一个人。所有的人都存储在persons.js文件中,该文件位于src/components/lists中,看起来像这样:
const persons = [
{ name: "Person 1", id: "1" },
{ name: "Person 2", id: "2" },
{ name: "Person 3", id: "3" },
...];
// Export
export { persons };
当用户通过表单添加一个新人时,它应该是永久的(对其他用户可见),这意味着,我需要更改文件persons.js,不想使用本地存储。
凭借我有限的知识,我得出了这样的结论:我需要使用我安装的Express.js(沿着Axios)并尝试实现表单
Addperson.js位于src/components/other中,如下所示:
import React, { useState } from 'react';
import axios from 'axios';
function Addperson() {
const [name, setName] = useState('');
const [id, setId] = useState('');
const handleSubmit = async (e) => {
e.preventDefault();
try {
const res = await axios.post('/api/persons', { name, id });
console.log(res.data);
} catch (err) {
console.error(err);
}
};
return (
<form onSubmit={handleSubmit}>
<label>
Ime:
<input type="text" value={name} onChange={(e) => setName(e.target.value)} />
</label>
<br />
<label>
ID:
<input type="text" value={id} onChange={(e) => setId(e.target.value)} />
</label>
<br />
<button type="submit">Add Person</button>
</form>
);
}
export default Addperson;
Server.js位于应用根目录中:
const express = require('express');
const bodyParser = require('body-parser');
const { persons } = require('./src/components/lists/persons');
const app = express();
const port = 5000;
app.use(bodyParser.json());
app.post('/api/persons', (req, res) => {
const { name, id } = req.body;
persons.push({ name, id });
res.json(persons);
});
app.listen(port, () => {
console.log(`Server is listening on port ${port}`);
});
package.json:
{
"name": "firstapp",
"version": "0.1.0",
"private": true,
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.2.0",
"@fortawesome/free-brands-svg-icons": "^6.1.1",
"@fortawesome/free-regular-svg-icons": "^6.2.0",
"@fortawesome/free-solid-svg-icons": "^6.2.0",
"@fortawesome/react-fontawesome": "^0.2.0",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.1.1",
"@testing-library/user-event": "^13.5.0",
"axios": "^1.3.3",
"babel-plugin-macros": "^3.1.0",
"bootstrap": "^5.1.3",
"bootstrap-icons": "^1.10.3",
"date-fns": "^2.29.3",
"express": "^4.18.2",
"file-saver": "^2.0.5",
"firebase": "^9.15.0",
"fs": "^0.0.1-security",
"html-docx-js": "^0.3.1",
"html-react-parser": "^3.0.7",
"react": "^18.1.0",
"react-bootstrap": "^2.3.1",
"react-bootstrap-icons": "^1.10.2",
"react-datepicker": "^4.8.0",
"react-dom": "^18.1.0",
"react-router-dom": "^6.4.5",
"react-scripts": "5.0.1",
"react-select": "^5.4.0",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
React应用程序(客户端)运行良好,但看起来我无法获得工作的express server.js。
当我尝试运行node server.js时,我得到:
C:\Users\xxxx\Desktop\web\firstapp\src\components\lists\persons.js:62
export { persons };
^^^^^^
SyntaxError: Unexpected token 'export'
当我尝试提交用户时,我得到:
404(未找到)返回首页
有没有人可能看到任何明显的错误设置?任何帮助是受欢迎的。谢谢
1条答案
按热度按时间c7rzv4ha1#
您无法像这样从
Express
导入React组件,然后尝试修改变量并让应用上的其他用户看到该更改。您已经升级到至少需要database
。我强烈建议跳到
Firebase
来利用Firestore
,因为您可以存储对象的Persons
数组,然后只需创建一个Firestore“侦听器”,当对Firestore中的Persons对象进行更改时,每个React用户的UI都会看到该侦听器。Get realtime updates with Cloud Firestore
否则,您将考虑设置MySQL + Websockets之类的东西。
此外,如果您必须直接编辑在客户机之间共享的本地后端文件,则可以使用
fs
。读取数据:
正在写入文件: