首页 > 解决方案 > 无法发布 /api/users/register

问题描述

我正在学习 Udemy MERN 堆栈课程,但我遇到了一个问题。在解决这个问题之前完成它是没有意义的,在我的搜索中,我发现了类似的问题,但这是开发的未来点。我刚刚添加了用户注册并正在使用邮递员检查它,即图片中的第 10 部分:

在此处输入图像描述

所以一切都可以建立一个基本的api,它是第9节并得到了这个结果

在此处输入图像描述

我用教练的代码检查了我的代码,并用他的代码替换了其中的一些,但即使我运行教练发布的代码,我也会遇到同样的错误。我不知道是什么原因造成的。

在此处输入图像描述

在此处输入图像描述

服务器.js

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const users = require('./routes/api/users');
const profile = require('./routes/api/profile');
const posts = require('./routes/api/posts');
const app = express();
// Body parser 
middlewareapp.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// // DB Config
const db = require('./config/keys').mongoURI;
// Connect to MongoDB
mongoose
    .connect(db)
    .then(() => console.log('MongoDB Connected'))
.catch(err => console.log(err));
app.get('/', (req, res)=> res.send('Hello World!'));
// Use Routes
app.use('/api/users', users);
app.use('/api/profile', profile);
app.use('/api/posts', posts);
const port = process.env.PORT || 5001;
app.listen(port, () => console.log(`Server running on port ${port}`));

键.js

module.exports = {
    mongoURI: 'mongodb://udemy1:udemy1@ds145921.mlab.com:45921/udemydev1'
}

用户.js

const express = require('express');
const router = express.Router();
const gravatar = require('gravatar');
const bcrypt = require('bcryptjs');
//Load User model
const User = require('../../models/User')
// @route   GET api/users/test
// @desc    Tests users route
// @access  Public
router.get('/test', (req,res) => res.json({msg: "Users works"}));
// @route   GET api/users/register
// @desc    Register users
// @access  Public
router.post('register', (req, res) => {
    User.findOne({ email: req.body.email })
     .then(user => { 
       if (user) {
            return res.status(400).json({ email: 'Email already exists'});
        } else { 
           const avatar = gravatar.url(req.body.email,{
                s: '200', //size 
               r: 'pg', //rating 
               d: 'mm' //default   
         }); 
           const newUser = new User ({  
             name: req.body.name,        
       email: req.body.email,          
     avatar,       
        password: req.body.password
            }); 
           bcrypt.genSalt(10, (err, salt) => { 
               bcrypt.hash(newUser.password, salt, (err, hash) => {
                    if (err) throw err;   
                 newUser.password = hash; 
                   newUser.save()
                        .then(user => res.json(user)) 
                       .catch(err => console.log(err));
                })
            })  
      }  
  })
});
module.exports = router;

帖子.js

const express = require('express');
const router = express.Router();
// @route   GET api/posts/test
// @desc    Tests posts route
// @access  Public
router.get('/test', (req,res) => res.json({msg: "Posts works"}));
module.exports = router;

  profiles.js

const express = require('express');
const router = express.Router();
// @route   GET api/profile/test
// @desc    Tests profile route
// @access  Public
router.get('/test', (req,res) => res.json({msg: "Profile works"}));
module.exports = router;

User.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
//create schema
const UserSchema = new Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    avatar: {
        type: String
    },
    date: {        type: Date,
        default: Date.now
    }});
module.exports = User = mongoose.model('users', UserSchema);

包.json

{
  "name": "dev",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "server": "nodemon server"
  },
  "author": "Ali Najdi",
  "license": "MIT",
  "dependencies": {
    "bcryptjs": "^2.4.3",
    "body-parser": "^1.18.3",
    "express": "^4.16.3",
    "gravatar": "^1.6.0",
    "jsonwebtoken": "^8.3.0",
    "mongoose": "^5.2.5",
    "passport": "^0.4.0",
    "passport-jwt": "^4.0.0",
    "validator": "^10.4.0"
  },
  "devDependencies": {
    "nodemon": "^1.18.3"
  }
}

标签: expressmern

解决方案


所以基本上你/在 user.js 文件中的注册处理程序中缺少一个

router.post('/register', (req, res) => {
    User.findOne({ email: req.body.email })
     .then(user => { 
       if (user) {
            return res.status(400).json({ email: 'Email already exists'});
        } else { 
           const avatar = gravatar.url(req.body.email,{
                s: '200', //size 
               r: 'pg', //rating 
               d: 'mm' //default   
         }); 
           const newUser = new User ({  
             name: req.body.name,        
       email: req.body.email,          
     avatar,       
        password: req.body.password
            }); 
           bcrypt.genSalt(10, (err, salt) => { 
               bcrypt.hash(newUser.password, salt, (err, hash) => {
                    if (err) throw err;   
                 newUser.password = hash; 
                   newUser.save()
                        .then(user => res.json(user)) 
                       .catch(err => console.log(err));
                })
            })  
      }  
  })
});
module.exports = router;

至于为什么它不能在您的浏览器中工作是浏览器发出请求时它发出 GET 请求,这就是为什么它不能在浏览器中工作,因为您的 POST 请求处理程序


推荐阅读