从包含URL的字符串中获取主机名、协议和端口的TypeScript方法

4
如果我有一个字符串,如http://localhost:8080,并且我想提取URL的不同部分,例如协议http,域名(localhost)和端口(8080),那么在Typescript中最好的方法是什么?
我可以对字符串进行简单解析以获取不同值。但是不确定这是否是最佳/最清洁的方法。我应该先将此字符串转换为有效的URL(使用某个库),然后从中获取主机名、协议和端口吗?Java会有这样的库,可以轻松让我做到这一点,但是我该如何在Typescript中实现相同的功能?

你的开发环境是什么?(例如:https://nodejs.org/docs/latest/api/url.html) - David Sherret
Angular 2 是我的前端,后端是 Node。 - user1892775
1
首先,要求TypeScript可能不会给你带来太多结果。请问JavaScript; 其次,您正在询问哪种技术?浏览器、服务器、物联网? - andrew.fox
3个回答

6
您可以使用 URL 类
let url = new URL("http://localhost:8080");
console.log(url.protocol); // http:
console.log(url.host); // localhost:8080
console.log(url.port); // 8080

(示例代码)

虽然不是所有浏览器都支持,但如果您想使用它,可以查找对应的polyfills。


编辑

在Node中可以这样实现:

import { URL } from "url";

let url = new URL("http://localhost:8080");
console.log(url.protocol); // http:
console.log(url.host); // localhost:8080
console.log(url.port); // 8080

如果您遇到以下编译错误:

error TS2307: 找不到模块'url'

那么您需要使用node定义:

npm install @types/node

它没有给我编译错误。但是,在运行时,它会抛出异常:“URL未定义”。我错过了什么吗?我正在node后端上实现它。 - user1892775
它在Node中得到支持:https://nodejs.org/api/url.html,但你需要导入它:`const url = require('url');` - Nitzan Tomer
请检查我的修订答案。 - Nitzan Tomer
import { URL } from "url"; 给我编译错误 "[ts] 模块 '"url"' 没有导出成员 'URL'。" - user1892775
奇怪。那段代码在我的电脑上编译/运行得非常好。你使用的是哪个版本的Node和它的定义文件?当你运行 cat node_modules/@types/node/package.json| grep _id 时,你得到了什么? - Nitzan Tomer
显示剩余2条评论

2
您可以使用HTMLAnchorElement来实现这个目的。
let a = document.createElement("a");
a.href = "http://localhost:8080";

console.log(a.protocol);
console.log(a.host);
console.log(a.port);

1
如果您正在使用Node.js 6或更低版本,
import * as url from 'url';
const { protocol, host, port } = url.parse('http://localhost:8080');
console.log(protocol); // http:
console.log(host); // localhost:8080
console.log(port); // 8080

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