节点js函数"/>
未找到URL反应调用节点js函数
我尝试使用fecth方法通过前端反应使用nodejs创建一些身份验证系统,但一直说:GEThttp://localhost:9000/user/register400(未找到),但我成功在另一页上调用了api的get方法,如:fetch( “ http://localhost:9000/disneyCharacter”)
这里是我的代码:
import React, { useState } from 'react'
import { Link } from 'react-router-dom';
import { axios } from 'axios';
const Register = () => {
const user = {
name: '',
email: '',
password: '',
confirmPassword: '',
}
const [userData, setUserData] = useState(user);
const [error, setError] = useState('');
const [submitted, setSubmitted] = useState(false);
const handleChange = e => {
setUserData({ ...userData, [e.target.id]: e.target.value })
}
const data = {
method: 'POST',
headers : { 'Content-Type': 'application/json ' },
body: JSON.stringify({
name: user.name,
email: user.email,
password: user.password
})
};
const saveUser = e => {
e.preventDefault();
fetch('http://localhost:9000/user/register', { data })
.then(response => setUserData({
name: name,
email: email,
password: password
}))
.then(setSubmitted(true))
.then(console.log(userData))
.catch(error => {
setError(error);
console.log(error);
})
}
const newUser = () => {
setUserData(user);
setSubmitted(false);
}
const { name, email, password, confirmPassword } = userData;
const btn = name === '' || email === '' || password === '' || password !== confirmPassword
? <button disabled>Inscription</button> : <button>Inscription</button>
// gestion erreurs
const errorMsg = error !== '' && <span>{error.message}</span>
return (
<div className="signUpLoginBox">
<div className="slContainer">
<div className="">
<div className="formContent">
<form onSubmit={saveUser}>
{errorMsg}
<h2>Inscription</h2>
<div className="inputBox">
<input type="text" id="name" onChange={handleChange} value={name} autoComplete="off" />
<label htmlFor="pseudo">Name</label>
</div>
<div className="inputBox">
<input type="email" id="email" onChange={handleChange} value={email} autoComplete="off" required />
<label htmlFor="email">Email</label>
</div>
<div className="inputBox">
<input type="password" id="password" onChange={handleChange} value={password} autoComplete="off" required />
<label htmlFor="password">Mot de passe</label>
</div>
<div className="inputBox">
<input type="password" id="confirmPassword" onChange={handleChange} value={confirmPassword} autoComplete="off" required />
<label htmlFor="confirmPassword">Confirmez le mot de passe</label>
</div>
{btn}
</form>
<div className="linkContainer">
<Link className="simpleLink" to="/login">Déjà inscrit? Connectez-vous </Link>
</div>
</div>
</div>
</div>
</div>
);
};
export default Register
我的身份验证文件node.js:
const router = require('express').Router();
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const User = require('../models/User');
const { registerValidation, loginValidation } = require('./validation');
router.post('/register', async (req, res) => {
//LETS VALIDATE THE DATA BEFORE WE A USER
const {error} = registerValidation(req.body);
if (error) return res.status(400).send(error.details[0].message);
//Checking if the user is already in the database
const emailExist = await User.findOne({email: req.body.email})
if(emailExist) return res.status(400).send('Email already exists');
//Hash passwords
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(req.body.password, salt);
//Create a new user
const user = new User({
name: req.body.name,
email: req.body.email,
password: hashedPassword
});
try{
const savedUser = await user.save();
res.send( {user: user._id});
}catch(err){
res.status(400).send(err);
}
});
module.exports = router;
然后在我的app.js(节点)中就像:
const authRoute = require('./ routes / auth');
app.use('/ user',authRoute);
您看到问题了吗?
回答如下:在前端,您是从“ / user / register”获取的,但是您的auth文件中节点中的帖子只是“ / register”。尝试使它们匹配。
更多推荐
未找到URL反应调用节点js函数
发布评论