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

Javascript nodejs-我通过POST发送的参数未定义,javascript,json,node.js,ajax,express,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.

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个错误请求,这意味着我发送的是未定义的,即使当我检查那里的POST请求时,Firebug中有明显的参数和值可见,并且我知道我正在传递某些东西,因为在Firebug中,我传递的变量具有DOM部分中的值,这些值在Firebug下的POST请求中弹出(parameters-user=“some text here”)。

当您使用Content Type=application/json时
然后所有主体都将解析为JSON,您无需解析它
if(typeof req.body==“string”){
var body=JSON.parse(req.body)
}

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

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

希望它能起作用

您是否尝试过将
数据:{“user”:user}
更改为
数据:JSON.stringify({“user”:user})
?您在
req.body
中得到了什么?您是否尝试过控制台.log整个请求对象?另外,您可能对POST请求有一些保护,比如CSRF令牌?当您执行console.log(req.body)时,结果是什么?用户是什么?一根绳子?的确是。谢谢