前端反应未将数据发送到 mongoDB 数据库 [英] front end react is not sending data to to mongoDB database

查看:50
本文介绍了前端反应未将数据发送到 mongoDB 数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

应用程序假设注册新用户并将新用户信息发送到 MongoDB,但是当我尝试注册用户时,它会引发 500 内部错误.控制台说错误在用户文件中,终端说这是错误,代理错误:无法将请求/api/users 从 localhost:3000 代理到 https://localhost:5000.[1] 参见 https://nodejs.org/api/errors.html#errors_common_system_errors 了解更多信息 (EPROTO).我已经尝试通过给它一个不同的路径和目标来更改 packet.json 中的代理,但它不起作用.也许我忽略了一些东西.在此处输入代码

THE app is suppose to register the new user and send the new users info to the MongoDB, but when i attempt to register the user it throws an error of 500 internal error. the console says the error is in the user file, the terminal say this is the error, Proxy error: Could not proxy request /api/users from localhost:3000 to https://localhost:5000. [1] See https://nodejs.org/api/errors.html#errors_common_system_errors for more information (EPROTO). I've already tried changing the proxy in the packet.json by giving it a different path and target but its not working. maybe i'm overlooking something. enter code here

import React, { useReducer } from 'react';
import axios from 'axios';
import AuthContext from './authContext';
import authReducer from './authReducer';
import {
 REGISTER_SUCCESS,
 REGISTER_FAIL,
 USER_LOADED,
 AUTH_ERROR,
 LOGIN_SUCCESS,
 LOGIN_FAIL,
 LOGOUT,
 CLEAR_ERRORS 
 } from '../types';

const AuthState = props => {
//initial state 
const initialState = {
    token: localStorage.getItem('token'),
    isAuthenticated: null,
    user: null,
    loading: true,
    error: null    
};
const [ state, dispatch ] = useReducer(authReducer, initialState);

// load user
const loadUser = () => console.log('load user') ;

// register user
const register = async formData => {
  const config = {
      headers: {
          'Content-Type': 'application/json'
      }
  }
  try {
   const res = await axios.post('api/users', formData, config);
   dispatch({
       type: REGISTER_SUCCESS, 
       payload: res.data 
   });
  } catch (err){
    dispatch({
        type: REGISTER_FAIL, 
        payload: err.response.data.msg
    });

  }
}

// login user
const login = () => console.log('login') ;


//logut
const logout = () => console.log('logout') ;


 // clear errors
 const clearErrors = () => console.log('clearErrors') ;

 return (
    <AuthContext.Provider
    value= {{
       token: state.token,
       isAuthenticated: state.isAuthenticated,
       loading: state.loading,
       user: state.user,
       error: state.error,
       register,
       loadUser,
       login,
       logout,
       clearErrors
    }}>

    {props.children}

    </AuthContext.Provider>
 );
 };
  export default AuthState;

//这是我的带有路由的 server.js 文件

//this is my server.js file with the routes

  const express = require('express');
  const connectDB = require('./config/db')

  //connect MongoDB
   connectDB();


   const app = express();

   //init middleware
   app.use(express.json({extended: false}));

   app.get('/', (req, res) => res.json({ msg: 'hello welcome'})
   );

   //define routes 
   app.use('/api/users', require('./routes/users'));
   app.use('/api/auth', require('./routes/auth'));
   app.use('/api/contacts', require('./routes/contacts'))

   const PORT = process.env.PORT || 5000;

   app.listen(PORT, () => console.log(`server is working on ${PORT}`))

//这是mongoDB代码

// this is mongoDB code

  const mongoose = require('mongoose');
  const config = require('config');
  const db = config.get('mongoURI');

  const connectDB = async () =>{
  try{ await
    mongoose.connect(db, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false

  });
 console.log('mongo connected..')

 } catch (err){
 console.log(err.message);
 process.exit(1)
  }
 };
 module.exports = connectDB;

//这是控制台抛出 500 内部错误的用户文件.

// this the users file where the console is throwing the 500 internal error.

      const express = require('express');
      const router = express.Router();
      const bcrypt = require('bcryptjs');
      const jwt = require('jsonwebtoken');
      const config = require('config');
       const { check, validationResult } = require('express-validator');

       const User = require('../models/User')

    // This route  Post request to api/users,
   // description   register a  user,
   // access to public to register an become a user
   router.post('/',  [
   check('name', 'Name is require').not().isEmpty(),
   check('email', 'please include email').isEmail(),
   check('password', 'enter a password with atleast 6 characters'
  ).isLength({min: 6})

  ],
   async (req, res) =>{
     const errors = validationResult(req);
      if(!errors.isEmpty()){
        return res.status(400).json({ errors: errors.array()});
   }
    const { name, email, password } = req.body; 
    try{
         let user = await User.findOne({email});
      if(user){
         return res.status(400).json({msg: 'user already exist'})
     }
      user  = new User({
        name,
        email,
        password
     });
      const salt = await bcrypt.genSalt(10);
      user.password = await bcrypt.hash(password, salt);
      await user.save();

     // object to send in the token
      const payload = {
        user: {
            id: user.id
        }
     }
      jwt.sign(payload, config.get('jwtSecret'), {
        expiresIn: 36000
       }, (err, token) => {
          if(err) throw err;
            res.json({token});

      });

     } catch (err){
       console.log(err.message);
       res.status(500).send('server error')
     }
    });


      module.exports = router;

推荐答案

我发现问题了!!!我的用户文件中有一个意外的标记,简单的冒号干扰了代码

I figure out the problem!!! I had an unexpected token in my users file that simple colon was interfering with the code

这篇关于前端反应未将数据发送到 mongoDB 数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆