我正在使用我学习的原则构建一个简单的博客here(使用Express和MongoDB的CRUD应用程序)。为了编辑以前发布的帖子,我想填充一个文本字段,其中包含从下拉菜单中选择标题的博客文章的内容。这样我就可以轻松地进行更改并提交。
我写了一个基本的'put'获取请求,除了在出现问题时报告错误外什么都不做:
fetch('articles', {method: 'put'})
.then(
function(response) {
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' + response.status);
return;
}
// Examine the text in the response
response.json().then(function(data) {
console.log(data);
});
}
)
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
这里没有错,所以执行了console.log(data)
:
然而,当我将'put'更改为'get'(并且不做其他更改)时,我收到404错误:
'get'获取请求怎么会导致404错误,但'put'请求不会?我在本地托管这个应用程序,所以我从localhost:3000运行它。我的服务器代码中的“get”,“post”和“put”操作如下所示:
app.get('/', function (req, res) {
db.collection('articles').find().toArray(function (err, result) {
if (err) return console.log(err);
res.render('index.ejs', {articles: result});
});
});
app.post('/articles', function (req, res) {
db.collection('articles').save(req.body, function (err, result) {
if (err) return console.log(err);
console.log('saved to database');
res.redirect('/');
});
});
app.put('/articles', function (req, res) {
db.collection('articles')
.findOneAndUpdate({title: 'test title'}, {
$set: {
title: req.body.title,
body: req.body.body
}
}, {
sort: {_id: -1},
upsert: true
}, function (err, result) {
if (err) return res.send(err);
res.send(result);
});
});
我想消除这个404错误,因此我可以继续使用'get'请求的最终原因:用以前发布的博客条目的内容填充文本字段。在我完成编辑后,我计划使用'put'请求来完成MongoDB中的更改。
如果您需要任何其他信息,请与我们联系。非常感谢您的建议!
答案 0 :(得分:2)
您没有GET /articles
路线;但是,你确实有GET /
路线。
如果您希望GET /articles
有效,则应将第一个参数更改为app.get
至'/articles'
。