请求正文为空,POST 节点 js ajax 调用 json Web 令牌
Posted
技术标签:
【中文标题】请求正文为空,POST 节点 js ajax 调用 json Web 令牌【英文标题】:request body empty with POST node js ajax calling with json web token 【发布时间】:2020-08-30 17:15:24 【问题描述】:你能帮帮我吗~
我正在尝试在节点 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));
);
但是调用post请求时req.body为空或者,我尝试了bodyparser,或者dataType但是没有成功
【问题讨论】:
【参考方案1】: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 */
);
【讨论】:
以上是关于请求正文为空,POST 节点 js ajax 调用 json Web 令牌的主要内容,如果未能解决你的问题,请参考以下文章
AJAX Post 请求错误:“不能为空”,[验证::required] 在 POST 正文中发送 JSON 对象时
Google Cloud Functions 节点 JS - 来自客户端获取的 POST 请求,请求正文未通过 [重复]
我正在使用 mandrill 和 Node.js 创建一个邮件客户端...我的节点服务器在提交邮件客户端表单时收到一个空的 POST 请求正文
当使用 okhttp 发送 post 请求时,服务器接收到的请求正文为空。可能是啥问题?