const fetch = require("node-fetch").default;

    let iApi = express.Router();

    
        iApi.post("/update/:name/:value", async (req, res) => {
                   
                    const name = req.params["name"];
                    const value = req.params["value"];
            
                    const headers = { ...req.headers };
                    const url = `${process.env.URL}/name/${name}/value/${value}`;
            
                    const options = {
                        url: url,
                        method: "post",
                        headers: headers,
                        gzip: true,
                    };
            

                     try {
                        const response = await fetch(url, options);
                        handleResponseNoBody(
                          response.ok,
                          response.status,
                          response.body,
                          res,
                          url
                        );
                      } catch (err) {
                        handleResponseNoBody(false, 500, err, res, url);
                      }
                });

function handleResponseNoBody(ok, status, data, res, url) {
    const loggerOpts = Object.assign({}, LOG_DEFAULTS, {
        endpoint_url: url,
        application: "app1",
    });

    if (!ok) {
        loggerOpts.description = url + " error retrieving endpoint";
        loggerOpts.response_obj = { status_code: 500 };
        loggerOpts.err = data;
        logger.error(loggerOpts);
        res.status(status).send(data);
    } else if (status === 200) {
        loggerOpts.description = `${url} return 200`;
        loggerOpts.response_obj = { status_code: 200 };
        loggerOpts.response_body = data;
        logger.info(loggerOpts);
        res.status(status).send(data);
    } else {
        loggerOpts.description = url + " endpoint did not return 200 status";
        loggerOpts.error = data;
        loggerOpts.response_obj = { status_code: status };
        logger.info(loggerOpts);
        res.status(status).send(data);
    }
}

此代码工作并提供200当","(逗号)或字符串"制表符"是作为值传递,并按预期工作,但当我试图传递"%7C"(|-管道)它给出400个错误的请求,我不知道为什么有人能帮助我这一点?非常感谢.

Https://xxx/name/NAME/value/,-Works Https://xxx/name/NAME/value/tab-Works Https://xxx/name/NAME/value/%7C-不工作

推荐答案

当您在req.params.value中收到%7C路由参数时,它已经被解码为"|".

在构建upstream 请求URL时,应确保使用encodeURIComponent()对其进行正确编码

const url = `${process.env.URL}/name/${encodeURIComponent(name)}/value/${encodeURIComponent(value)}`;

请注意,原生fetch()是Node.js中的一个选项.如果您使用v18或更高版本,我强烈建议您改用它.

Javascript相关问答推荐

确定MutationRecord中removedNodes的索引

如何访问Json返回的ASP.NET Core 6中的导航图像属性

如何避免移动设备中出现虚假调整大小事件?

基于变量切换隐藏文本

防止用户在selectizeInput中取消 Select 选项

jQuery s data()[storage object]在vanilla JavaScript中?'

阿波罗返回的数据错误,但在网络判断器中是正确的

使用LocaleCompare()进行排序时,首先使用大写字母

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

这个值总是返回未定义的-Reaction

从Nextjs中的 Select 项收集值,但当单击以处理时,未发生任何情况

在css中放置所需 colored颜色 以填充图像的透明区域

使用带有HostBinding的Angular 信号来更新样式?

从逗号和破折号分隔的给定字符串中查找所有有效的星期几

无法重定向到Next.js中的动态URL

通过跳过某些元素的对象进行映射

在将元素追加到DOM之前,createElement()是否会触发回流?混淆abt DocumentFragment行为

表单数据中未定义的数组键

TabNavigator和StackNavigator之间的Reaction Native中的导航问题

使用静态函数保存 node 前的钩子