Node.js 为什么我的路由在crud应用程序中发出get请求而不是post请求?
为什么我的路由在crud应用程序中发出get请求而不是post请求?我有一个html表单,可以发布到“/api/zone”。但是路由器没有在RESTAPI中执行post函数,而是进行get调用 这是我的表格:Node.js 为什么我的路由在crud应用程序中发出get请求而不是post请求?,node.js,express,crud,Node.js,Express,Crud,为什么我的路由在crud应用程序中发出get请求而不是post请求?我有一个html表单,可以发布到“/api/zone”。但是路由器没有在RESTAPI中执行post函数,而是进行get调用 这是我的表格: <form action="/api/zone" method="post"> <!-- The Crux of Rest API is really methods. It's a contract in REST API!--> &l
<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>
我有以下版本的node和express:
节点-6.11express-4.15
这是一个奇怪的问题,但我在Rails中看到过这种情况,我相信这就是正在发生的事情 基本上,最初将正确的请求发送到POST,并调用正确的
路由器.POST
处理程序。然而,该路由处理程序无法正确处理表单中的输入,并且出于某种原因发送重定向以获取路由版本(请注意,post和GET路由匹配),而不是返回一个400错误,表示无法处理表单
至于它无法处理表单的原因,请注意,路由处理程序在/:resource
上使用了一个slug,这意味着req.params.resource
将返回一个字符串。看看你的表单,上面指定的操作
是/api/zone
。因此,路由器将整个字符串/api/zone
解释为slug,因此,当在post处理程序中执行req.params.resource
时,从中返回的值是api/zone
和notzone
,对其进行if语句检查
这就是为什么它可能会在、失败、不知道该做什么并向GET发送重定向时计算
因此,您可以通过对POST路由进行一些解析/验证和/或向if语句检查添加else
,以重定向到某个位置或发送错误来修复此问题
希望这有帮助 我能够通过在每个函数中放入带有唯一语句的控制台日志进行验证。而且,每次我提交表单时,get函数中的语句都会显示在终端中,而不是post中的语句。api/zone
的处理程序在哪里?
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
})
})
}
})