无法使用带有JSON.stringify(..)的AJAX请求将JSON发送到Express路由器

时间:2014-06-21 03:00:56

标签: javascript jquery ajax json

我正在努力使这个简单的示例工作,这将成为用户名和密码登录验证系统的一部分:

我想将我的用户信息作为JSON发送到服务器,并验证服务器端的信息。不幸的是,我的服务器似乎不理解来自客户端的JSON数据,我的所有尝试都是undefined(下面的服务器/客户端日志)。

以下是我的相关信息:

app.js

var login = require('./routes/login');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/login', login);

login.js

var express = require('express');
var router = express.Router();

// * VERIFY users listing. */
router.get('/verify', function(req, res) {
    console.log("verifying...");
    console.log("userinfo: " + req.params.username);
    console.log("userinfo: " + req.username);
    console.log("userinfo: " + req.query.username);

    res.send(
        (err === null) ? { msg: 'Done with verfications' } : { msg: err }
    );

});

webapp_login.js

var userinfo = {username: 'lucas', password: '81dc9bdb52d04dc20036dbd8313ed055'};
console.log("sending userinfo to server: " + userinfo);
$.ajax({
    type: 'GET',
    data: JSON.stringify(userinfo), 
    contentType: 'application/json; charset=utf-8',
    url: '/login/verify'
}).done(function(response) {
    alert(msg);
});

不幸的是,这是我的服务器输出:

GET /login/webapp_login.html 304 8ms
GET /javascripts/jquery-md5.js 304 5ms
GET /login/webapp_login.css 304 2ms
GET /login/webapp_login.js 200 7ms - 3.56kb
verifying...
userinfo: undefined
userinfo: undefined
userinfo: undefined
GET /login/verify?{%22username%22:%22lucas%22,%22password%22:%2281dc9bdb52d04dc20036dbd83
13ed055%22} 500 235ms - 1.48kb                                                          

我的浏览器控制台输出:

sending userinfo to server: [object Object]
webapp_login.js (line 30)
GET http://localhost:3002/login/verify?{%22username%2...sword%22:%2281dc9bdb52d04dc20036dbd8313ed055%22}

500 Internal Server Error
        237ms   
jquery.min.js (line 4)
"NetworkError: 500 Internal Server Error - http://localhost:3002/login/verify?{%22username%22:%22lucas%22,%22password%22:%2281dc9bdb52d04dc20036dbd8313ed055%22}"

我怀疑我的JSON解析器可能有问题。似乎大多数其他人都在使用express.json(),但在开始安装更多Express捆绑包之前,我想要另一个意见。

1 个答案:

答案 0 :(得分:0)

JSON.stringify会将字典对象转换为字符串,因此请勿使用它。 和req.query(在GET请求的情况下),无法解析那个JSON.stringify字典

因此,始终将查询字符串数据传递给GET和POST ajax请求:

data: {'username': 'xyz', 'password': 'abc'}