当前位置: 首页 > 面试题库 >

Node.js(带有express&bodyParser):无法从发布请求中获取表单数据

祝锐
2023-03-14
问题内容

我似乎无法恢复发送到我的Node.js服务器的发布请求的表单数据。我在服务器代码和发布请求(在chrome中使用postman发送)的下方放置了:

发布请求

    POST /api/login HTTP/1.1
    Host: localhost:8080
    Cache-Control: no-cache

    ----WebKitFormBoundaryE19zNvXGzXaLvS5C
    Content-Disposition: form-data; name="userName"

    jem
    ----WebKitFormBoundaryE19zNvXGzXaLvS5C

NodeJS服务器代码

    var express    = require('express');        // call express
    var app        = express();                 // define our app using express
    var bodyParser = require('body-parser');

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

    app.all('/*', function(req, res, next) {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Headers', 'Content-Type,accept,access_token,X-Requested-With');
        next();
    });

    var port = process.env.PORT || 8080;        // set our port

    var router = express.Router();              // get an instance of the express Router

    router.get('/', function(req, res) {

        res.json({ message: 'I am groot!' });   
    });

    // Login
    router.route('/login')

        .post(function(req, res){

            console.log('Auth request recieved');

            // Get the user name
            var user = req.body.userName;

            var aToken = getToken(user);

            res.json({

                'token':'a_token'
            });
        });

    app.use('/api', router);

    app.listen(port);

登录方法尝试获取req.body.userName,但是req.body始终为空。我在SO上看到过其他描述这种行为的案例,但是没有相关的答案在这里适用。

感谢您的帮助。


问题答案:

通常,快速应用程序需要指定适当的主体解析器中间件才能req.body包含主体。

[编辑]

  1. 如果您需要解析url编码的(非多部分)表单数据以及JSON,请尝试添加
        // Put this statement near the top of your module
    var bodyParser = require('body-parser');


    // Put these statements before you define any routes.
    app.use(bodyParser.urlencoded());
    app.use(bodyParser.json());

首先,您需要将body-parser添加到的dependencies属性package.json,然后执行npm update

  1. 要处理多部分表单数据,bodyParser.urlencoded()主体解析器将无法工作。请参阅此处建议的模块以解析多部分实体。


 类似资料:
  • 问题内容: 使用express 3.1.0,我有一个非常简单的形式: 并在app.js中: 尝试发布此表单时,我得到: 并在控制台中: 我在这里想念什么? 问题答案: 您的示例对我有用。我删除了对用户,用户和路由的引用,以便可以运行它,并且HTTP POST已接收并正确显示在控制台中。 我怀疑该错误是在您的User.addUser()代码中。

  • 问题内容: 我想获取使用表单从页面传递的数据,并在重定向的页面中使用该数据。 我的客户端有以下表​​格: 我的服务器中有这个脚本: 问题答案: 使用)中间件: 然后,表单值将在req.body上: 设置允许bodyParser接受包括嵌套对象在内的表单数据中的json之类的数据。例如,使用javascript发送而不是使用传统HTML格式发送的名称/值对。如果不需要,可以将扩展值设置为false。

  • 问题内容: 我正在启动我的第一个Node.js服务器。我正在尝试遵循Node.js中的教程。 安装完Node.js并执行后,下一条指令是通过运行启动服务器,这将产生以下错误: 似乎它需要一个名为express的模块,因此我环顾四周,找到了可以解决此问题的命令。但是,出现以下错误: 问题答案: 对于以前跑步的人来说,似乎可以解决该问题

  • 问题内容: 我正在尝试让我的函数返回http get请求,但是,无论如何,它似乎在?scope中丢失了。我对Node.js不熟悉,因此不胜感激 问题答案: 当然,您的日志会返回:您在完成请求之前先进行日志。问题不是范围,而是 异步性 。 是异步的,这就是为什么它将回调作为参数的原因。做您在回调中要做的事情(传递给的):

  • 原理 对于POST请求的处理,koa-bodyparser中间件可以把koa2上下文的formData数据解析到ctx.request.body中 安装koa2版本的koa-bodyparser@3中间件 npm install --save koa-bodyparser@3 举个例子 例子代码 demo源码 https://github.com/ChenShenhai/koa2-note/blo

  • 问题内容: 我有一个名为“ localhost:3000 / returnStat”的服务,该服务应将文件路径作为参数。例如“ /BackupFolder/toto/tata/titi/myfile.txt”。 如何在浏览器上测试此服务?例如,如何使用Express格式化此请求? 问题答案: 我尚未测试您的代码,但其他方法可行 如果您想从请求网址获取路径信息 1.如果您获取的URL参数仍然无法读取