你能帮我吗〜
我正在尝试在节点js上使用json webtoken并调用post方法来设置数据。
节点js服务器上的代码:
app.use(bodyParser.raw({ type: 'application/jwt' }));
代码前端调用:
$.ajax({
url: '/setSession',
type: 'POST',
Accept : 'application/json',
//contentType: 'application/json',
dataType: 'json',
data: { "hello": templateName},
//data: JSON.stringify({ "hello": templateName}),
headers: {
'Authorization': 'Bearer '+ token
},
success: function (result) {console.log('post ok'+JSON.stringify(result));
// CallBack(result);
},
error: function (error) { console.log('post failed'+JSON.stringify(error));
}
});
但是调用发布请求时请求正文为空或{},我尝试了bodyparser或dataType,但未成功
1)对于您的服务器代码,这是应该如何实现的方法:
const express = require('express');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');
const app = express();
app.use(bodyParser.json());
app.listen(4000, () => {
console.log('Books service started on port 4000');
});
2)您必须定义一个中间件来检查它是否是有效令牌:
const authenticateJWT = (req, res, next) => {
const authHeader = req.headers.authorization;
if (authHeader) {
const token = authHeader.split(' ')[1];
jwt.verify(token, accessTokenSecret, (err, user) => {
if (err) {
return res.sendStatus(403);
}
req.user = user;
next();
});
} else {
res.sendStatus(401);
}
};
3)后路由器:
app.post('/setSession', authenticateJWT, (req, res) => {
/* your logic here */
});