express - 无法发布 /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"
}
}
解决方案
所以基本上你/
在 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 请求处理程序
推荐阅读
- javascript - 单击时如何将 div 对齐到从底部浮动/悬停?
- php - 如何在 Laravel 中按单列分组
- elasticsearch - Elasticsearch - 查询字符串中的特殊字符
- node.js - 尝试 find.count 时如何避免“[object Object]1”
- oracle - 如何在两个日期之间的表上获取日期范围分区名称(给定日期范围)
- javascript - 如何在java中的mapReduce中调用mongodb服务器端函数
- docker - Linkerd 边车注入
- php - 更好的性能,JOIN 还是多个查询?
- git - Git:提交日期的批量更改
- javascript - 使用 Numeral JS 将任何数字转换为相同的比例