为什么我的路由在crud应用程序中发出get请求而不是post请求?我有一个html表单,发布到`/ api / zone'。但是,不是路由器在我的rest api中执行post函数,而是进行get调用。
这是我的表格:
<form action="/api/zone" method="post"> <!-- The Crux of Rest API is really methods. It's a contract in REST API!-->
<input type='text' name='name' placeholder='Name' /><br />
<input type='text' name='zipCodes' placeholder='Zip Code' /><br />
<input type='submit' value='Create Zone' />
</form>
我的Api:
router.get('/:resource', function(req, res, next) {
var resource = req.params.resource
if (resource == 'zone'){
ZoneController.find(req.query, function(err, results){
if (err) {
res.json({
confirmation: 'fail',
message: err
})
return
}
res.json({
confirmation: 'success1234',
results: results
})
});
}
})
router.post('/:resource', function(req, res, next){
var resource = req.params.resource
if (resource == 'zone') {
ZoneController.create(req.body, function(err, result){
if (err) {
res.json({
confirmation: 'fail',
message: 'Not Created.'
})
return
}
res.json({
confirmation: 'success',
results: result
})
})
}
})
我有以下版本的node和express:
节点 - 6.11
快递 - 4.15
答案 0 :(得分:0)
这是一个奇怪的问题,但我已经在Rails中看到过这种情况,我相信这就是正在发生的事情。
基本上,最初将正确的请求发送到POST,并调用正确的router.post
处理程序。然而,该路由处理程序无法正确处理表单中的输入,并且由于某种原因将重定向发送到GET版本的路由(请注意,您的发布和获取路由匹配),而不是返回a,比方说400错误说它不能处理表格。
现在为什么它不能处理表单,请注意您的路由处理程序在/:resource
上使用了一个slug,这意味着req.params.resource
将返回一个字符串。看一下您的表单,action
上指定的/api/zone
就是/api/zone
。所以正在发生的事情是路由器将整个字符串req.params.resource
解释为slug,所以当你在post处理程序中执行api/zone
时,返回的值是zone
和不 if
,您有if语句检查。
这就是为什么它可能会评估else
,失败,不知道该做什么并将重定向发送到GET。
因此,您可以通过对POST路由进行一些解析/验证和/或在if语句检查中添加git merge --squash develop
以重定向某处或发送错误来解决此问题。
希望这有帮助!