嗯,我正在阅读 MEAN Machine 这本书并遵循它的示例.我试图弄清楚我的代码有什么问题,所以它不会发出任何 DELETE 请求.GET、PUT 和 POST 可以正常工作.
Well, I'm reading the MEAN Machine book and following it's examples. I'm trying to figure out what's wrong with my code so it won't make any DELETE request. GET, PUT and POST works as should.
我的 server.js 上有这段代码:
I have this code on my server.js:
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, content-type, Authorization');
next();
});
var apiRouter = express.Router();
apiRouter.route('/users/:user_id')
.get( function (req, res) {
User.findById( req.params.user_id, function (err, user) {
if (err) res.send (err);
res.json(user);
});
})
.put( function (req, res) {
User.findById(req.params.user_id, function (err, user) {
if (err) res.send(err);
if (req.body.name) user.name = req.body.name;
if (req.body.username) user.username = req.body.username;
if (req.body.password) user.password = req.body.password;
user.save( function (err){
if (err) send (err);
res.json({message: 'User updated'});
});
})
.delete( function (req, res) {
User.remove({
_id: req.params.user_id
}, function (err, user) {
if (err) return res.send(err);
res.json({ message: 'Deleted' });
});
});
});
我有一组用户 Modulus MongoDB 数据库,当我尝试将 POSTMAN 与 localhost:8080/api/users/5610e5576d827dc41fb8e6e 一起使用时,POSTMAN 说
I have a set of users the Modulus MongoDB database and, when I try to use POSTMAN with localhost:8080/api/users/5610e5576d827dc41fb8e6e, POSTMAN says
Cannot DELETE /api/users/5610e5576d827dc41fb8e6e
而我与 Morgan 的节点服务器说
while my Node server with Morgan says
DELETE /api/users/5610e5576d827dc41fb8e6e 404
为什么我会收到 404?我做错了什么?
Why I'm getting a 404? What Am I doing wrong?
完整代码
你把 put()
的右括号放在了错误的位置.所以你在 put()
路由器中定义你的 delete
路由器:
You've placed closing brackets of put()
in wrong place. So you're defining your delete
router inside the put()
router:
这是正确缩进后的代码:
This is your code after proper indentation:
.put( function (req, res) {
User.findById(req.params.user_id, function (err, user) {
if (err) res.send(err);
if (req.body.name) user.name = req.body.name;
if (req.body.username) user.username = req.body.username;
if (req.body.password) user.password = req.body.password;
user.save( function (err){
if (err) send (err);
res.json({message: 'User updated'});
});
})
.delete( function (req, res) { // <===== defined inside 'put',
User.remove({
_id: req.params.user_id
}, function (err, user) {
if (err) return res.send(err);
res.json({ message: 'Deleted' });
});
});
})
所以,只需将 delete
路由器移到 put
路由器回调之外
So, just move the delete
router outside of put
router callback