Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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
Javascript 特快专递及;NodeJS:从多部分表单POST访问响应参数_Javascript_Node.js_Express_Http Post_Httpresponse - Fatal编程技术网

Javascript 特快专递及;NodeJS:从多部分表单POST访问响应参数

Javascript 特快专递及;NodeJS:从多部分表单POST访问响应参数,javascript,node.js,express,http-post,httpresponse,Javascript,Node.js,Express,Http Post,Httpresponse,我有一个简单的表单,允许用户上传文件类型的图像,并通过无线电输入选择将文件的“类别”类型附加到响应主体 文件处理本身在后端按预期进行处理-但是,当涉及到访问响应正文中的参数时,我接收到未定义的参数值。谁能给我一些我可能忽略的东西指点一下吗 以下是标记和后端脚本的示例: <!DOCTYPE html> <html> <head> <script src="js/blueimp-gallery.min.js" async&g

我有一个简单的表单,允许用户上传文件类型的图像,并通过无线电输入选择将文件的“类别”类型附加到响应主体

文件处理本身在后端按预期进行处理-但是,当涉及到访问响应正文中的参数时,我接收到未定义的参数值。谁能给我一些我可能忽略的东西指点一下吗

以下是标记和后端脚本的示例:

    <!DOCTYPE html>
<html>

    <head>
        <script src="js/blueimp-gallery.min.js" async></script>
        <script src="js/bootstrap.min.js" async></script>
        <script src="https://code.jquery.com/jquery-3.1.1.min.js" async></script>
        <script src="js/script.js" async></script>
        <link rel="stylesheet" href="css/blueimp-gallery.min.css">
        <link rel="stylesheet" type="text/css" href="css/style.css" />
    </head>

    <body>


        <div id="main">
            <div class="navbar-wrapper" style="border: 12px solid black;">
                <ul>
                    <li><a href="#">Login</a></li>
                    <li><a href="#">Sign up</a></li>
                </ul>
            </div>

            <div>
                <form 
                        id              =  "uploadForm"
                        enctype         =  "multipart/form-data"
                        action          =  "/api/photo"
                        method          =  "post">

                    <input type="file" name="userPhoto" />
                    <input type="submit" value="Upload Image" name="submit">

                    <label>travel</label>
                    <input type="radio" value="travel"      name="cat">
                    <label>food</label>
                    <input type="radio" value="food"        name="cat">
                    <label>community</label>
                    <input type="radio" value="community"   name="cat">
                </form>
            </div>

    </body>
</html>







app.post('/api/photo', function(req,res){

    console.log("request to upload image recvied.. upload in progress.");
    //console.log("res.catype() = TODO " + req.get("cat"));


    // Returning undefined*
    console.log("res.catype() = " + res.cat);

    // handle file persistence to disk.
    upload(req,res,function(err) {
        if(err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
});

旅行 食物 社区 app.post('/api/photo',函数(req,res){ log(“请求上传已录制的图像..正在上传”); //console.log(“res.catype()=TODO”+req.get(“cat”); //返回未定义* console.log(“res.catype()=”+res.cat); //处理文件到磁盘的持久性。 上传(请求、恢复、功能(错误){ 如果(错误){ 返回res.end(“上传文件时出错”); } res.end(“文件已上载”); }); });
你应该从
req.body.cat
访问你的
cat
值,参考更多细节你应该从
req.body.cat
访问你的
cat
值,参考更多细节不确定你是否发布了整个服务器端代码,但我没有提到中间件。您应该使用它来处理任何传入的“帖子”。你应该在你的路线之前申报。这样,您可以使用
req.body
访问数据

const bodyParser = require('body-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/api/photo', function(req,res){

    console.log("request to upload image recvied.. upload in progress.");
    //console.log("res.catype() = TODO " + req.get("cat"));


    // Returning undefined*
    console.log("res.catype() = " + res.cat);

    // handle file persistence to disk.
    upload(req,res,function(err) {
        if(err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
});

不确定是否发布了整个服务器端代码,但我没有提到中间件。您应该使用它来处理任何传入的“帖子”。你应该在你的路线之前申报。这样,您可以使用
req.body
访问数据

const bodyParser = require('body-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/api/photo', function(req,res){

    console.log("request to upload image recvied.. upload in progress.");
    //console.log("res.catype() = TODO " + req.get("cat"));


    // Returning undefined*
    console.log("res.catype() = " + res.cat);

    // handle file persistence to disk.
    upload(req,res,function(err) {
        if(err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
});
对于由多个部分组成的表单(带有像图像这样的附加文件的表单),您需要在NodeJS服务器上使用(或其他一些多格式解析器),而不是主体解析器。该链接将为您提供一个如何设置的示例。假设客户端HTML/JS设置正确,则可以将图像提取为文件,将请求提取为正文信息

服务器端节点的外观如下所示:

app.post('/api/photo', upload.any(), function (req, res, next) {
    var files = req.files;
    if (files) {//Checks to see if any attached files
        files.forEach(function (file) {
            console.log('FILE');
            console.log(JSON.stringify(file));//contents of file
            console.log(JSON.stringify(file.filename));
        });
    }
    console.log(req.body);
    res.sendFile(__dirname + "/resources/JSONStructures/genericResponse.json");
});
如果您可以发布客户端JavaScript,它将有助于确定问题的起因。具体地说,我看到很多AJAX都是以简捷的方式设置的,这会导致多表单出现问题。

对于多部分表单(带有图像等附加文件的表单),您需要在NodeJS服务器上使用(或其他一些多表单解析器),而不是主体解析器。该链接将为您提供一个如何设置的示例。假设客户端HTML/JS设置正确,则可以将图像提取为文件,将请求提取为正文信息

服务器端节点的外观如下所示:

app.post('/api/photo', upload.any(), function (req, res, next) {
    var files = req.files;
    if (files) {//Checks to see if any attached files
        files.forEach(function (file) {
            console.log('FILE');
            console.log(JSON.stringify(file));//contents of file
            console.log(JSON.stringify(file.filename));
        });
    }
    console.log(req.body);
    res.sendFile(__dirname + "/resources/JSONStructures/genericResponse.json");
});

如果您可以发布客户端JavaScript,它将有助于确定问题的起因。具体地说,我看到很多AJAX都是以简单快捷的方式设置的,这会导致多表单出现问题。

Hi alpha,尝试这种方法会导致“cat”的类型错误为未定义。我应该提到我以前试过这个。嗨,阿尔法,尝试这个方法会给我留下一个未定义的“cat”类型错误。我应该提到我以前试过这个。