nodejs - 我通过POST发送的参数未定义

时间:2017-03-30 12:34:45

标签: javascript json node.js ajax express

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时,我得到一个"意外的令牌u"错误400错误请求,意味着我发送的内容是未定义的,即使我在Firebug中有明显的参数值,当我在那里检查POST请求时,我知道我传递了一些事实,因为在Firebug中,我传递的变量具有在DOM部分中看到的值,并且在Firebug下的POST请求中弹出相同的值(参数 - 用户="这里的一些文字")。

2 个答案:

答案 0 :(得分: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
        }
    });

希望它有效!

答案 1 :(得分:-3)

当您使用Content-Type = application / json
时 然后所有正文将解析为JSON,你不需要解析它 $