【发布时间】: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