请求正文为空,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 请求时,服务器接收到的请求正文为空。可能是啥问题?

Node.js/ Express POST 请求正文被解析为不正确的 JSON

帖子请求正文为空