Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么我的路由在crud应用程序中发出get请求而不是post请求?_Node.js_Express_Crud - Fatal编程技术网

Node.js 为什么我的路由在crud应用程序中发出get请求而不是post请求?

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

为什么我的路由在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!-->
        <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.11
express-4.15


这是一个奇怪的问题,但我在Rails中看到过这种情况,我相信这就是正在发生的事情

基本上,最初将正确的请求发送到POST,并调用正确的
路由器.POST
处理程序。然而,该路由处理程序无法正确处理表单中的输入,并且出于某种原因发送重定向以获取路由版本(请注意,post和GET路由匹配),而不是返回一个400错误,表示无法处理表单

至于它无法处理表单的原因,请注意,路由处理程序在
/:resource
上使用了一个slug,这意味着
req.params.resource
将返回一个字符串。看看你的表单,上面指定的
操作
/api/zone
。因此,路由器将整个字符串
/api/zone
解释为slug,因此,当在post处理程序中执行
req.params.resource
时,从中返回的值是
api/zone
not
zone
,对其进行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
            })
        })
    }

})