无法 POST /api/users/register

Ali*_*jdi 2 express mern

我正在学习 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}`));
Run Code Online (Sandbox Code Playgroud)

按键.js

module.exports = {
    mongoURI: 'mongodb://udemy1:udemy1@ds145921.mlab.com:45921/udemydev1'
}
Run Code Online (Sandbox Code Playgroud)

用户.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;
Run Code Online (Sandbox Code Playgroud)

帖子.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;
Run Code Online (Sandbox Code Playgroud)

  profiles.js
Run Code Online (Sandbox Code Playgroud)

User.js
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

包.json

fay*_*eed 5

所以基本上你/在 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;
Run Code Online (Sandbox Code Playgroud)

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