如何修改 Account.jsx 文件中的 POST 请求?

huangapple go评论92阅读模式
英文:

How do I modify POST request in Account.jsx file?

问题

这是您的代码的翻译:

  1. 我正在开发一个个人项目员工管理系统并在发送POST请求时遇到问题该项目使用MERNMongoDBNode.jsReact.js)。以下是项目链接 https://github.com/Mbicha/employee_management_system,以及[显示错误的图片][1]
  2. [1]: https://i.stack.imgur.com/0LT1c.png
  3. 代码如下
  4. Account.jsx
  5. ```jsx
  6. import React, { useState } from "react";
  7. import { Link } from "react-router-dom";
  8. import http from "../http-common";
  9. const Account = () => {
  10. const [formData, setFormData] = useState({
  11. first_name: "", last_name: "", email: "", phone: "", password: ""
  12. });
  13. const handleFormChange = (event) => {
  14. setFormData(prev => ({
  15. ...prev,
  16. [event.target.name]: event.target.value
  17. }));
  18. }
  19. const handleSubmit = async (event) => {
  20. event.preventDefault();
  21. try {
  22. const options = {
  23. headers: {
  24. 'Content-Type': 'application/json',
  25. },
  26. };
  27. await http.post('/user', formData, options);
  28. console.log("已保存");
  29. event.target.reset();
  30. } catch (error) {
  31. console.log(error);
  32. }
  33. }
  34. return (
  35. <div>
  36. <div className="flex flex-col justify-center items-center">
  37. <form className="flex flex-col items-center rounded-lg shadow-md p-2 w-full sm:w-2/3 md:w-1/3 lg:w-1/3">
  38. <h1 className="text-center text-green-700 text-2xl mb-4">账户</h1>
  39. <input className="border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700" type="text" placeholder="名字" name='first_name' onChange={handleFormChange}/>
  40. <input className="border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700" type="text" placeholder="姓氏" name='last_name' onChange={handleFormChange}/>
  41. <input className="border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700" type="email" placeholder="电子邮件" name='email' onChange={handleFormChange}/>
  42. <input className="border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700" type="text" placeholder="电话" name='phone' onChange={handleFormChange}/>
  43. <input className="border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700" type="password" placeholder="密码" name='password' onChange={handleFormChange}/>
  44. <button className="bg-green-700 hover:bg-green-600 text-white font-bold p-2 rounded focus:outline-none focus:shadow-outline w-4/5 mb-4" type="button" onClick={handleSubmit}>注册</button>
  45. <span>已经有账户? <Link to='/'>登录</Link></span>
  46. </form>
  47. </div>
  48. </div>
  49. )
  50. }
  51. export default Account;

http-common.js

  1. import axios from "axios";
  2. export default axios.create({
  3. baseURL: "http://localhost:5000/api",
  4. headers: {
  5. "Content-type": "application/json"
  6. }
  7. });

server.js

  1. const express = require("express");
  2. const bodyParser = require("body-parser");
  3. const cors = require("cors");
  4. const cookie = require('cookie-parser');
  5. require('./config/db.config');
  6. const auth = require('./routes/route_auth');
  7. const app = express();
  8. app.use(cors());
  9. app.use(bodyParser.json());
  10. app.use(bodyParser.urlencoded({ extended: true }));
  11. app.use(express.json());
  12. app.use(cookie());
  13. // 路由
  14. app.use('/api/user', auth);
  15. const PORT = process.env.PORT || 5000;
  16. app.listen(PORT, () => {
  17. console.log(`服务器正在运行在 ${PORT}`);
  18. });

route_auth.js

  1. const express = require("express");
  2. const router = express.Router();
  3. const user = require("../controllers/auth");
  4. router.post('/', user.register);
  5. module.exports = router;

auth.js(控制器)

  1. const user = require("../models/user");
  2. const utils = require("../utils");
  3. exports.register = async(req, res) => {
  4. try {
  5. const hashed = utils.hashPassword(req.body.password, 10);
  6. const newUser = new user({
  7. first_name: req.body.first_name,
  8. last_name: req.body.last_name,
  9. email: req.body.email,
  10. phone: req.body.phone,
  11. password: hashed
  12. });
  13. await newUser.save();
  14. res.status(201).json(newUser);
  15. } catch (error) {
  16. res.status(404).send({ error:error });
  17. }
  18. }
  19. // 所有用户
  20. exports.getUsers = async(req, res) => {
  21. try {
  22. const users = await user.find({});
  23. res.send({ users })
  24. } catch (err) {
  25. res.status(400).send({err: err});
  26. }
  27. };
  28. // 根据id获取用户
  29. module.exports.getUserById = async (req, res) => {
  30. try {
  31. const user = await user.findById(req.params.id);
  32. res.send({ user });
  33. } catch (error) {
  34. res.status(404).send({ message: `未找到用户` });
  35. }
  36. }

user.js(模型)

  1. const mongoose = require('mongoose');
  2. const Schema = mongoose.Schema;
  3. const user = new Schema({
  4. first_name: {type: String, required: true},
  5. last_name: {type: String, required: true},
  6. email: {type: String, required: true},
  7. phone: {type: String, required: true},
  8. password: {type: String, required: true}
  9. });
  10. module.exports = mongoose.model("user", user);

db.config.js

  1. const mongoose = require("mongoose");
  2. const uri = "mongodb://127.0.0.1:27017/employees_db";
  3. // 允许使用Promise
  4. mongoose.Promise = global.Promise;
  5. // 连接
  6. mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology:true });
  7. // 验证
  8. mongoose.connection
  9. .once('open', () => console.log('已连接到数据库!'))
  10. .on('error', err => console.log('数据库发生错误!', err));

utils.js

  1. const bycrypt = require('bcrypt');
  2. // 哈希方法
  3. const hashPassword = (password, rounds) => {
  4. const salt = bycrypt.genSaltSync(rounds);
  5. const hashedPassword = bycrypt.hashSync(password, salt);
  6. return hashedPassword;
  7. }

错误发生在Account.jsx,当我向数据库发送数据时出现“http://localhost:5000/api/user 404 (未找到)”错误。

  1. <details>
  2. <summary>英文:</summary>
  3. I am working on a personal project Employee Management System and am stuck on sending POST request. The project is using MERN (MongoDB, nodejs, and reactjs). The following is the project link https://github.com/Mbicha/employee_management_system, and [Image showing error][1]
  4. [1]: https://i.stack.imgur.com/0LT1c.png
  5. Codes are as follows:
  6. Account.jsx
  7. import React, { useState } from &quot;react&quot;;
  8. import { Link } from &quot;react-router-dom&quot;;
  9. import http from &quot;../http-common&quot;;
  10. const Account = () =&gt; {
  11. const [formData, setFormData] = useState({
  12. first_name: &quot;&quot;, last_name: &quot;&quot;, email: &quot;&quot;, phone: &quot;&quot;, password: &quot;&quot;
  13. });
  14. const handleFormChange = (event) =&gt; {
  15. setFormData(prev =&gt; ({
  16. ...prev,
  17. [event.target.name]: event.target.value
  18. }));
  19. }
  20. const handleSubmit = async (event) =&gt; {
  21. event.preventDefault();
  22. try {
  23. const options = {
  24. headers: {
  25. &#39;Content-Type&#39;: &#39;application/json&#39;,
  26. },
  27. };
  28. await http.post(&#39;/user&#39;, formData, options);
  29. console.log(&quot;Saved&quot;);
  30. event.target.reset();
  31. } catch (error) {
  32. console.log(error);
  33. }
  34. }
  35. return (
  36. &lt;div&gt;
  37. &lt;div className=&quot;flex flex-col justify-center items-center&quot;&gt;
  38. &lt;form className=&quot;flex flex-col items-center rounded-lg shadow-md p-2 w-full sm:w-2/3 md:w-1/3 lg:w-1/3&quot;&gt;
  39. &lt;h1 className=&quot;text-center text-green-700 text-2xl mb-4&quot;&gt;Account&lt;/h1&gt;
  40. &lt;input className=&quot;border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700&quot; type=&quot;text&quot; placeholder=&quot;First Name&quot; name=&#39;first_name&#39; onChange={handleFormChange}/&gt;
  41. &lt;input className=&quot;border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700&quot; type=&quot;text&quot; placeholder=&quot;Last Name&quot; name=&#39;last_name&#39; onChange={handleFormChange}/&gt;
  42. &lt;input className=&quot;border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700&quot; type=&quot;email&quot; placeholder=&quot;Email&quot; name=&#39;email&#39; onChange={handleFormChange}/&gt;
  43. &lt;input className=&quot;border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700&quot; type=&quot;text&quot; placeholder=&quot;Phone&quot; name=&#39;phone&#39; onChange={handleFormChange}/&gt;
  44. &lt;input className=&quot;border-b-2 border-gray-400 w-4/5 p-2 mb-4 focus:outline-none focus:border-green-700&quot; type=&quot;password&quot; placeholder=&quot;Password&quot; name=&#39;password&#39; onChange={handleFormChange}/&gt;
  45. &lt;button className=&quot;bg-green-700 hover:bg-green-600 text-white font-bold p-2 rounded focus:outline-none focus:shadow-outline w-4/5 mb-4&quot; type=&quot;button&quot; onClick={handleSubmit}&gt;Register&lt;/button&gt;
  46. &lt;span&gt;Already have an account? &lt;Link to=&#39;/&#39;&gt;Login&lt;/Link&gt;&lt;/span&gt;
  47. &lt;/form&gt;
  48. &lt;/div&gt;
  49. &lt;/div&gt;
  50. )
  51. }
  52. export default Account;
  53. http-common.js
  54. import axios from &quot;axios&quot;;
  55. export default axios.create({
  56. baseURL: &quot;http://localhost:5000/api&quot;,
  57. headers: {
  58. &quot;Content-type&quot;: &quot;application/json&quot;
  59. }
  60. });
  61. server.js
  62. const express = require(&quot;express&quot;);
  63. const bodyParser = require(&quot;body-parser&quot;);
  64. const cors = require(&quot;cors&quot;);
  65. const cookie = require(&#39;cookie-parser&#39;);
  66. require(&#39;./config/db.config&#39;);
  67. const auth = require(&#39;./routes/route_auth&#39;);
  68. const app = express();
  69. app.use(cors());
  70. app.use(bodyParser.json());
  71. app.use(bodyParser.urlencoded({ extended: true }));
  72. app.use(express.json());
  73. app.use(cookie());
  74. //routes
  75. app.use(&#39;/api/user&#39;, auth);
  76. const PORT = process.env.PORT || 5000;
  77. app.listen(PORT, () =&gt; {
  78. console.log(`Server is running on ${PORT}`);
  79. });
  80. route_auth.js
  81. const express = require(&quot;express&quot;);
  82. const router = express.Router();
  83. const user = require(&quot;../controllers/auth&quot;);
  84. router.post(&#39;/&#39;, user.register);
  85. module.exports = router;
  86. auth.js // controller
  87. const user = require(&quot;../models/user&quot;);
  88. const utils = require(&quot;../utils&quot;);
  89. exports.register = async(req, res) =&gt; {
  90. try {
  91. const hashed = utils.hashPassword(req.body.password, 10);
  92. const newUser = new user({
  93. first_name: req.body.first_name,
  94. last_name: req.body.last_name,
  95. email: req.body.email,
  96. phone: req.body.phone,
  97. password: hashed
  98. });
  99. await newUser.save();
  100. res.status(201).json(newUser);
  101. } catch (error) {
  102. res.status(404).send({ error:error });
  103. }
  104. }
  105. // All users
  106. exports.getUsers = async(req, res) =&gt; {
  107. try {
  108. const users = await user.find({});
  109. res.send({ users })
  110. } catch (err) {
  111. res.status(400).send({err: err});
  112. }
  113. };
  114. // User by id
  115. module.exports.getUserById = async (req, res) =&gt; {
  116. try {
  117. const user = await user.findById(req.params.id);
  118. res.send({ user });
  119. } catch (error) {
  120. res.status(404).send({ message: `User is not found` });
  121. }
  122. }
  123. user.js // model
  124. const mongoose = require(&#39;mongoose&#39;);
  125. const Schema = mongoose.Schema;
  126. const user = new Schema({
  127. first_name: {type: String, required: true},
  128. last_name: {type: String, required: true},
  129. email: {type: String, required: true},
  130. phone: {type: String, required: true},
  131. password: {type: String, required: true}
  132. });
  133. module.exports = mongoose.model(&quot;user&quot;, user);
  134. db.config.js
  135. const mongoose = require(&quot;mongoose&quot;);
  136. const uri = &quot;mongodb://127.0.0.1:27017/employees_db&quot;
  137. // Allow Promises
  138. mongoose.Promise = global.Promise;
  139. // Connection
  140. mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology:true });
  141. // Validation
  142. mongoose.connection
  143. .once(&#39;open&#39;, () =&gt; console.log(&#39;Connected to the database!&#39;))
  144. .on(&#39;error&#39;, err =&gt; console.log(&#39;Error with the database!&#39;, err));
  145. utils.js
  146. const bycrypt = require(&#39;bcrypt&#39;);
  147. // Hash Method
  148. const hashPassword = (password, rounds) =&gt; {
  149. const salt = bycrypt.genSaltSync(rounds);
  150. const hashedPassword = bycrypt.hashSync(password, salt);
  151. return hashedPassword;
  152. }
  153. Error is in occurring in Account.jsx when I send a data to the database &quot;http://localhost:5000/api/user 404 (Not Found)&quot;
  154. </details>
  155. # 答案1
  156. **得分**: 0
  157. 404错误代码表示没有与`/api/user`相关的终端点。
  158. ```javascript
  159. // 在 server.js 文件中
  160. // 路由
  161. app.use('/api/user', auth);
  162. // 在 routes/route_auth.js 文件中
  163. router.post('/', user.register);

我认为你的正确终端点路径是 /api/user/,需要添加斜杠。

英文:

404 Error code means that there is no endpoint which is related to /api/user.

  1. // In the server.js
  2. //routes
  3. app.use(&#39;/api/user&#39;, auth);
  4. // routes/route_auth.js
  5. router.post(&#39;/&#39;, user.register);

I think your correct endpoint path is /api/user/ <- add trailing slash

huangapple
  • 本文由 发表于 2023年6月12日 08:24:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/76453023.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定