请求体为空,带有JSON Web令牌的POST节点js ajax调用

问题描述 投票:0回答:1

你能帮我吗〜

我正在尝试在节点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,但未成功

jquery node.js post jwt
1个回答
0
投票

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 */
});
© www.soinside.com 2019 - 2024. All rights reserved.