不能POST/api/users/register
Cannot POST /api/users/register
我正在学习 Udemy MERN 堆栈课程,但遇到了一个问题。在解决这个问题之前完成它是没有意义的,并且在我的搜索中我发现了类似的问题但是未来的发展点。我刚刚添加了用户注册,正在用邮递员查看,也就是图中的第10部分:
所以一切都在建立一个基本的api,这是第 9 节并得到了这个结果
我用讲师的代码检查了我的代码,并用他的代码替换了一些代码,但是即使我 运行 代码讲师也发布了,我也得到了同样的错误。我不知道是什么原因造成的。
server.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}`));
keys.js
module.exports = {
mongoURI: 'mongodb://udemy1:udemy1@ds145921.mlab.com:45921/udemydev1'
}
users.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;
posts.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);
package.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 请求
的处理程序
我正在学习 Udemy MERN 堆栈课程,但遇到了一个问题。在解决这个问题之前完成它是没有意义的,并且在我的搜索中我发现了类似的问题但是未来的发展点。我刚刚添加了用户注册,正在用邮递员查看,也就是图中的第10部分:
所以一切都在建立一个基本的api,这是第 9 节并得到了这个结果
我用讲师的代码检查了我的代码,并用他的代码替换了一些代码,但是即使我 运行 代码讲师也发布了,我也得到了同样的错误。我不知道是什么原因造成的。
server.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}`));
keys.js
module.exports = {
mongoURI: 'mongodb://udemy1:udemy1@ds145921.mlab.com:45921/udemydev1'
}
users.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;
posts.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);
package.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 请求
的处理程序