【问题标题】:nodejs - Parameters I am sending via POST are undefinednodejs - 我通过 POST 发送的参数未定义
【发布时间】:2017-03-30 12:34:45
【问题描述】:

server.js:

    var express = require('express');
    var bodyParser = require('body-parser');
    var app = express();
    loggedIn = {};

    app.use('/',express.static('www')); // static files
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: true }));

    app.listen(8080, function () {
      console.log('Port 8080!');
    });

    app.get('/user', function(req, res) {
        if (typeof req.query.user != 'undefined') {
            user = req.query.user;
            res.status(200).send('Works');
        }
    });

    app.post('/user', function(req, res) {
            user = req.body.user;
            if (typeof users[user] != 'undefined') {
                return res.status(405).send('Access Forbidden');
            } else {
                   loggedIn.push(user);
                   res.status(201).send('New User');
            }
        }
    });

client.js 请求:

    $.ajax({
        method: "GET",
        url: "/user",
        data: {"user" : user},
        dataType: "application/json",
        success: function(data) {
            // success
        },
        error: function() {
            // error case
        }
    });

    $.ajax({
        method: "POST",
        url: "/user",
        data: {"user" : user},
        dataType: "application/json",
        success: function(data) {
            // success
        },
        error: function() {
            // error case
        }
    });

即使 GET 请求完全按预期工作,但 POST 却没有。每当我尝试传递一个 POST 请求时,它都会挂起,即使所有参数都显示在 Firebug 中。当我尝试将 ContentType 强制为 application/json 时,我收到“Unexpected token u”错误和 400 Bad Request,这意味着我发送的内容是未定义的,即使当我检查 POST 时在 Firebug 中有明确的参数值可见在那里请求,我知道我正在传递一些东西,因为在 Firebug 中,我传递的变量具有在 DOM 部分中看到的值,并且这些相同的值在 Firebug 下的 POST 请求中弹出(参数 - 用户 = “这里有一些文字”)。

【问题讨论】:

  • 你试过把data: {"user" : user}改成data: JSON.stringify({"user" : user})吗?
  • 你在req.body得到什么?
  • 您是否尝试过 console.log 整个请求对象?另外,您是否对 POST 请求有一些保护,例如 CSRF 令牌?
  • 做console.log(req.body)的时候,结果是什么?
  • 什么是用户?一个字符串?

标签: javascript json node.js ajax express


【解决方案1】:

尝试以字符串形式发送数据

 $.ajax({
        method: "POST",
        url: "/user",
        data: JSON.stringify({"user" : user}),
        contentType: "application/json; charset=utf-8",
          success: function(data) {
            // success
        },
        error: function() {
            // error case
        }
    });

希望它有效!

【讨论】:

  • 确实如此。谢谢!
【解决方案2】:

当你使用 Content-Type = application/json
然后所有的body都会解析成JSON,你不需要解析它
if(typeof req.body == "string"){ var body = JSON.parse(req.body) }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多