我尝试使用 React 和 Express 进行表单处理程序,得到了这个答案: 404 错误 无法 POST /api/upload 你能告诉我如何解决这个问题吗? 这是我的前端和后端代码: 前端:
const emailSchema = yup.object().shape({
email: yup.string().required("Ви не вказали e-mail адресу").email("Неправильна e-mail адреса"),
});
const {
values,
errors,
touched,
handleBlur,
handleChange,
handleSubmit,
handleReset
} = useFormik({
initialValues: {
email: "",
},
validationSchema: emailSchema,
onSubmit: async () => {
setSubscribeActive(true);
await sub(values);
handleReset(values);
},
});
const [subscribeActive, setSubscribeActive] = useState(false);
const sub = async ({email}) => {
try {
const response = await axios.post("http://localhost:3000/api/upload", {
email,
})
return response.data;
} catch (e) {
console.log(e);
}
};
后端:
const express = require("express");
const mongoose = require("mongoose");
const cors = require("cors");
const Post = require("./Post");
const DB_URL = `mongodb+srv://kostjn04e:[email protected]/`;
const PORT = 3000;
const app = express();
app.use(cors());
const corsOptions = {
origin: "http://localhost:3000",
optionSuccessStatus: 200, // для старых браузеров и SmartTV
};
app.use(express.json());
app.post("/api/upload", cors(corsOptions), async (req, res) => {
try {
const {email} = req.body;
const post = await Post.create(email);
res.status(200).json(post);
} catch (e) {
res.status(500).json(e);
}
});
async function startApp() {
try {
await mongoose.connect(DB_URL);
console.log("Connection successful");
app.listen(PORT, () => console.log("Server started on port " + PORT));
} catch (e) {
console.log(e);
}
}
startApp();
我尝试更改对“/”、“/subscribe”等的引用,但我仍然遇到相同的错误。 我还尝试更改我的域并在我的节点js文件中设置cors
Change your backend port to 5000 instead of 3000 and then try :
const express = require("express");
const mongoose = require("mongoose");
const cors = require("cors");
const Post = require("./Post");
const DB_URL = `mongodb+srv://kostjn04e:[email protected]/`;
const PORT = 5000;
const app = express();
app.use(cors());
const corsOptions = {
origin: "http://localhost:3000",
optionSuccessStatus: 200, // для старых браузеров и SmartTV
};
app.use(express.json());
app.post("/api/upload", cors(corsOptions), async (req, res) => {
try {
const {email} = req.body;
const post = await Post.create(email);
res.status(200).json(post);
} catch (e) {
res.status(500).json(e);
}
});
In frontend :
try {
const response = await axios.post("http://localhost:5000/api/upload", {
email,
})
return response.data;
} catch (e) {
console.log(e);
}
};