我正在努力使这个简单的示例工作,这将成为用户名和密码登录验证系统的一部分:
我想将我的用户信息作为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捆绑包之前,我想要另一个意见。
答案 0 :(得分:0)
JSON.stringify会将字典对象转换为字符串,因此请勿使用它。 和req.query(在GET请求的情况下),无法解析那个JSON.stringify字典
因此,始终将查询字符串数据传递给GET和POST ajax请求:
data: {'username': 'xyz', 'password': 'abc'}