使用curl -X PUTtestingREST路由,返回404

我正在学习MEAN堆栈,并在thinkster.io上跟随MEAN教程https://thinkster.io/mean-stack-tutorial/

我在“打开REST路由”部分。 我正在尝试使用curl命令来使用upvote:

curl -X PUT http://localhost:3000/posts/55387047f2334d2 c227e8079/upvote 

我收到以下错误消息:

 C:\Users\Michael\Desktop>curl -X PUT http://localhost:3000/posts/55387047f2334d2 c227e8079/upvote <h1>Not Found</h1> <h2>404</h2> <pre>Error: Not Found at app.use.res.render.message (C:\Users\Michael\Desktop\flapper-news\app.js: 39:13) at Layer.handle [as handle_request] (C:\Users\Michael\Desktop\flapper-news\n ode_modules\express\lib\router\layer.js:82:5) at trim_prefix (C:\Users\Michael\Desktop\flapper-news\node_modules\express\l ib\router\index.js:302:13) at C:\Users\Michael\Desktop\flapper-news\node_modules\express\lib\router\ind ex.js:270:7 at Function.proto.process_params (C:\Users\Michael\Desktop\flapper-news\node _modules\express\lib\router\index.js:321:12) at next (C:\Users\Michael\Desktop\flapper-news\node_modules\express\lib\rout er\index.js:261:10) at C:\Users\Michael\Desktop\flapper-news\node_modules\express\lib\router\ind ex.js:603:15 at next (C:\Users\Michael\Desktop\flapper-news\node_modules\express\lib\rout er\index.js:246:14) at Function.proto.handle (C:\Users\Michael\Desktop\flapper-news\node_modules \express\lib\router\index.js:166:3) at router (C:\Users\Michael\Desktop\flapper-news\node_modules\express\lib\ro uter\index.js:35:12)</pre> 

我的mongoose模式是关于app.js中的module.exports = app定义的,所以我不知道该怎么办。 我检查了我的复制和粘贴技能,没有错别字。

重新启动节点服务器解决了我的问题

你有没有仔细检查你是否做了上一步? 如果没有设置路由器,页面将无法parsing。

 router.put('/posts/:post/upvote', function(req, res, next) { req.post.upvote(function(err, post){ if (err) { return next(err); } res.json(post); }); }); 

如果在这一步之前你还没有遇到问题,那么我唯一能想到的就是问题了。 你也可以检查你的服务器是否可以通过本地主机来parsing,有时你必须使用你的私有IP地址192.168等,因为它取决于你的主机的networkingconfiguration。

我想我可能有一个答案。 我已经和几位在这个教程的这个特定部分被抓到的人交谈过了。

在“打开REST路由”>“预加载对象”下,我们被指示input以下代码:

 router.param('post', function(req, res, next, id) { var query = Post.findById(id); query.exec(function(err, post) { if (err) { return next(err); } if (!post) { return next(new Error('can\'t find post')); } req.post = post; return next(); }); }); 

但是,有些人一直在排除第二条线:

 var query = Post.findById(id); 

甚至插入到第三行:

 var query.exec(function(err, post) { 

这可能是解决您的问题的非常简单的方法。