Axios选项代替POST请求。Express Rest API(CORS)

5
我正在尝试使用Axios(和VueJs)向我的Rest Api(运行在本地主机上)发送跨源POST请求。但实际上它会发出OPTIONS请求到我的Rest Api。这绕过了一个中间件函数,该函数检查令牌并返回403。
这是登录功能。
router.post('/login', (req, res) => {     

User.authUser(req.body, (err, user) => {
    var passwordIsValid = bcrypt.compareSync(req.body.password, user.password);
    if (err) throw err;

    if (!user) {
        res.json({ success: false, message: 'User nicht gefunden' });
    } else if (user) {
        if (!passwordIsValid) {
            res.json({ success: false, message: 'Falsches Passwort' });
        } else {
            const payload = {
                admin: user.admin
            };
            var token = jwt.sign(payload, config.secret, {
                expiresIn: 86400
            });
            res.json({success: true, message: 'Token!', token: token});
        }

    }
})
});

如何让Axios发出正确的POST请求?我尝试了这个方法,因为我最初认为OPTIONS请求只是一个预检请求,但在我返回200(或204)后没有任何请求。

CORS中间件:

app.use(function(req, res, next) {    //set Response Headers
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    if ('OPTIONS' == req.method) {
        res.send(204);
    }
    else {
        next();
    }
});

相关:https://stackoverflow.com/q/58009309/3995261 - YakovL
1个回答

0

Axios有时会在CORS预检请求中发送OPTIONS请求,如果它不知道请求的Content-Type。

当您构建请求时,可以明确指定Content-Type,然后它应该按预期发送您的POST请求。

尝试使用以下代码替换axios.post(url, params)

axios.post(url, params, {
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接