首页 > 解决方案 > 在 Express 应用程序中添加参数时出现 CORS 错误

问题描述

我完全不明白为什么这不起作用。

我有一个托管在 Heroku 上的快速应用程序,基本上可以做到这一点

var urlMetadata = require('url-metadata')

var express = require('express')

var cors = require('cors')
var app = express()

app.use(cors())

app.get('/products', function (req, res, next) {
    res.json({
        msg: 'This is CORS-enabled for all origins!'
    })
})

app.get('/prod/:url', function (req, res, next) {

    var url = decodeURI(req.params.url);

    urlMetadata(url).then(
        function (metadata) {
            res.json({
                metadata
            });
        },
        function (error) {
            console.log(error)
        })
})

客户端

    axios
      .get(`https://git.heroku.com/egosmos-meta.git/prod`, {
        params: {
          url,
        },
      })
      .then((response) => {
        console.log(response);
      });

    axios
      .get(`https://egosmos-meta.herokuapp.com/products`)
      .then((response) => {
        console.log(response);
      });

这就是我得到的

在此处输入图像描述

如此/products有效,但/prod/:url会引发 CORS 错误

谢谢你的帮助!

标签: javascriptnode.jsexpressaxioscors

解决方案


params在 Axios 中定义了查询参数,例如,?url=http://example.com但您的 Express 应用程序需要一个路由参数

将您的客户端代码更改为以下内容

axios.get(`https://git.heroku.com/egosmos-meta.git/prod/${encodeURIComponent(url)}`)

你得到一个 CORS 错误,因为你没有路由,/prod?url=...所以 CORS 中间件没有启动。


推荐阅读