Javascript 为什么我不';不能在一条路线上获得请求正文?节点JS
您好,我的Node JS应用程序有以下问题: 我想进行身份验证,但当我在该路由上发送帖子时,会得到“req.body.username=undefined” 只有在这个路由上,其他路由才能毫无问题地获得req.body 套餐:Javascript 为什么我不';不能在一条路线上获得请求正文?节点JS,javascript,json,node.js,express,body-parser,Javascript,Json,Node.js,Express,Body Parser,您好,我的Node JS应用程序有以下问题: 我想进行身份验证,但当我在该路由上发送帖子时,会得到“req.body.username=undefined” 只有在这个路由上,其他路由才能毫无问题地获得req.body 套餐: var config = require('./config'); var express = require('express'); var app = express(); var path = require("path"); var bodyParser =
var config = require('./config');
var express = require('express');
var app = express();
var path = require("path");
var bodyParser = require('body-parser');
var bcrypt = require('bcrypt');
var bcryptSaltRounds = 10;
var jwt = require('jsonwebtoken');
var cors = require('cors');
app.set('superSecret', config.secret);
app.use(bodyParser.urlencoded({ extended: false}));
app.use(bodyParser.json());
app.use(express.static('public'));
app.options('*', cors());
app.use(cors());
app.use(express.static(path.join(__dirname, 'public')));
以下是服务器路由:
app.post('/auth', function (req, res, next) {
var username = req.body.username;
var password = req.body.password;
User.findOne({
where: { username: username}
}).then(function (user) {
if(user){
bcrypt.compare(password, user.password).then(function (passcheck) {
if(passcheck){
var jwtUser = {
username: user.username,
firstname: user.firstname,
lastname: user.lastname,
acceslevel: "all"
};
//var mysuperSecretPwd = app.get('superSecret');
var token = jwt.sign(jwtUser, app.get('superSecret'), {
expiresIn: 1 // expires in 24 hours
});
res.json({
success: true,
message: 'Theres your key',
token: token
});
}else{
res.status(401).json({
success: false,
message: 'Authentification failed. Password or User wrong'
});
}
});
}else{
res.status(401).json({
success: false,
message: 'Authentification failed'
});
}
}).catch(next);
});
以下是ajax请求:
$('#btnRegister').click(function () {
var firstname = $('#txtFirstnameRegister').val();
var lastname = $('#txtLastnameRegister').val();
var username = $('#txtUsernameRegister').val();
var password = $('#txtPasswordRegister').val();
if(firstname == "" || lastname == "" || username == "" || password == ""){
msg ="Please fill the fields.";
showInfo(msg);
}else{
$('#msgInsteadOfAlert').hide(300);
var userObject = {
firstname: firstname,
lastname: lastname,
username: username,
password: password
};
$.ajax({
method: post,
url: baseUrl + postUser,
data: userObject,
success: function () {
//TODO: CHECK RESPOND IF USER EXISTS
var msg = "User: " + username + " successfully added.";
showInfo(msg);
},
error: function (xhr, status, errorThrown) {
showErrorMessage(xhr, status, errorThrown);
}
});
}
});
提前谢谢。您必须将Ajax的方法声明为字符串
POST
:
$('#btnRegister').click(function () {
var firstname = $('#txtFirstnameRegister').val();
var lastname = $('#txtLastnameRegister').val();
var username = $('#txtUsernameRegister').val();
var password = $('#txtPasswordRegister').val();
if (firstname == "" || lastname == "" || username == "" || password == "") {
msg ="Please fill the fields.";
showInfo(msg);
} else {
$('#msgInsteadOfAlert').hide(300);
var userObject = {
firstname: firstname,
lastname: lastname,
username: username,
password: password
};
$.ajax({
method: "POST",
url: baseUrl + postUser,
data: userObject,
success: function () {
//TODO: CHECK RESPOND IF USER EXISTS
var msg = "User: " + username + " successfully added.";
showInfo(msg);
},
error: function (xhr, status, errorThrown) {
showErrorMessage(xhr, status, errorThrown);
}
});
}
});
也许问题在于文章的主体没有声明为JSON。试着这样做:
$.ajax({
method: "POST",
url: baseUrl + postUser,
data: userObject,
contentType: "application/json",
success: function () {
...
请不要发布代码的图片,请将其包含在您的问题中。您是否尝试过
console.log
gingreq.body
查看它的属性?以及如何发送您的post请求?可能将html/javascript发布到方法中,在$中使用“post”
。ajax
请求选项请注意,ajax调用中的post
是一个变量。尝试访问未定义的变量时应该会出现语法错误。非常感谢我删除了dataType和contentType,并添加了方法:POST,现在它可以工作了:D@Apacheluicner“也许会很有启发性。”马尔沃里奥谢谢你,我会看看的