typescript - 响应函数将端口替换为未定义
问题描述
我有一个将对象附加到 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])有问题
提前致谢!
解决方案
您将(在这种情况下,您的回调接收为)后面的replace
任何内容替换为以该字符串 ( )命名的属性的对象上的任何内容。您的对象没有任何带有 name 的属性,所以.:
"8080"
k
vals
"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'}
)
);
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'}
)
);
推荐阅读
- javascript - 模型不是由 AJAX 创建的
- visual-studio - Easy Repro UI Automatid 测试失败。出现错误 LoginPage' 引发了“System.MissingMethodException”类型的异常
- python - 使用 PyGithub 创建 Gist
- docker - 如何在同一台机器上的多个操作系统之间共享 docker 映像
- r - na.locf - 不允许负长度向量
- xml - xslt 一次显示一组 n 个 xml 节点
- c# - Windows Server 2016 - 请求被中止:无法创建 SSL/TLS 安全通道
- angular - 如何在 Angular 7 中加载外部资源
- excel - 在不使用动态范围选项的情况下更改枢轴范围
- python - Python:如何在特定位置复制和插入 xml 元素