首页 > 解决方案 > 响应函数将端口替换为未定义

问题描述

我有一个将对象附加到 url 的方法。我使用 ionic 和 java 作为我的后端。下面是方法。

public buildUrl(urlDetails:Object, vals:Object):string {
        let baseUrl = urlDetails["url"];
        console.log(baseUrl)
        console.log(vals)
        //replace $(..) with the values from vals
        let keys = vals ? Object.keys(vals) : null
        if(keys && keys.length > 0) {
            return baseUrl.replace(/:(\w+)/g, (_,k) => vals[k]);
        } else {
            return baseUrl;
        }

传递给对象的示例参数如下所示,

网址详情:http : //192.168.0.109 :8080/hiya/user/login

vals :{emailid:'test@test.com,password:'password'}

这里的baseUrl.replace(/:(\w+)/g, (_,k) => vals[k])函数从 baseurl 中删除了“:8080”,生成的 baseurl 如下所示

http://192.168.0.109undefined/hiya/user/login

我猜baseUrl.replace(/:(\w+)/g, (_,k) => vals[k])有问题

提前致谢!

标签: typescriptionic-framework

解决方案


您将(在这种情况下,您的回调接收为)后面的replace任何内容替换为以该字符串 ( )命名的属性的对象上的任何内容。您的对象没有任何带有 name 的属性,所以.:"8080"kvals"8080"vals"8080"vals[k]undefined

我会说该怎么做,但不清楚您所说的“将对象附加到 URL”是什么意思,以及为什么要针对端口进行替换。

例如,如果您尝试将对象的属性作为查询字符串参数应用到 URL,则不会replace在端口上使用来执行此操作。由于您似乎针对的是现代环境,因此我可能会遍历Object.entries(必要时可以轻松填充)的结果并附加到字符串,并确保使用以下内容对 URI 组件进行属性编码encodeURIComponent

function buildUrl(urlDetails, vals) {
    let baseUrl = urlDetails["url"];
    let sep = "?";
    for (const [key, value] of Object.entries(vals)) {
        baseUrl += `${sep}${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
        sep = "&";
    }
    return baseUrl;
}
console.log(
    buildUrl(
        {url: "http://192.168.0.109:8080/hiya/user/login"},
        {emailid:'test@test.com',password:'password'}
    )
);

mapjoin

function buildUrl(urlDetails, vals) {
    let baseUrl = urlDetails.url;
    const entries = Object.entries(vals);
    if (entries.length) {
        baseUrl += "?" + entries.map(([key, value]) =>
            `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
        ).join("&");
    }
    return baseUrl;
}
console.log(
    buildUrl(
        {url: "http://192.168.0.109:8080/hiya/user/login"},
        {emailid:'test@test.com',password:'password'}
    )
);


推荐阅读