Node.js url.parse()

本文介绍如何使用Node.js内置模块url.parse()来解析URL,并获取host、port、pathname等信息。通过示例展示了如何将URL查询参数解析为对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

url.parse()可以将一个完整的URL地址,分为很多部分,常用的有:host、port、pathname、path、query。

var http = require("http");
var url = require("url");

var server = http.createServer(function(req,res){
    var pathname = url.parse(req.url).pathname;
    var query = url.parse(req.url).query;
    console.log("patname:"+ pathname);
    console.log(query);
    res.end();
});
server.listen(3000,"127.0.0.1");

控制台 node url_parse.js
打开浏览器输入:
这里写图片描述
控制台输入结果:

var http = require("http");
var url = require("url");

var server = http.createServer(function(req,res){
    var pathname = url.parse(req.url).pathname;
    //url.parse()第二个参数为true,query属性会生成一个对象,如果为false,则返回url对象上的query属性会是一个未解析,未解码的字符串,默认为false
    var query = url.parse(req.url,true).query;
    var age = query.age;
    console.log("patname:"+ pathname);
    console.log(query);
    console.log("age:"+age);
    res.end();
});
server.listen(3000,"127.0.0.1");

这里写图片描述

详细了解见node.js手册

### Node.js 动态URL解析与路由实现方法 在Node.js中,动态URL的解析通常通过框架(如Express)或者原生HTTP模块来完成。以下是两种主要的方式及其具体实现。 #### 使用Express框架处理动态URL Express是一个流行的Node.js Web应用框架,提供了强大的路由功能,能够轻松定义和管理动态路由。例如: ```javascript const express = require('express'); const app = express(); // 定义带有参数的GET路由 app.get('/page/:id', (req, res) => { const id = req.params.id; console.log(`ID from URL: ${id}`); res.send(`You requested page with ID: ${id}`); }); // 启动服务器监听端口 app.listen(3000, () => { console.log('Server running at http://localhost:3000/'); }); ``` 上述代码展示了如何创建一个带有一个名为`id`的占位符的路由[^1]。当用户访问类似于`http://localhost:3000/page/12`这样的URL时,`:id`会被替换为实际传递的值,并可以通过`req.params.id`获取到该值。 #### 使用原生HTTP模块配合URL模块 如果不使用任何第三方库,则可以依靠Node.js内置的`url`模块手动解析请求中的路径信息。下面是一段示例代码展示这一过程: ```javascript const http = require('http'); const url = require('url'); const server = http.createServer((req, res) => { let parsedUrl = url.parse(req.url, true); if (parsedUrl.pathname === '/product' && parsedUrl.query.id !== undefined){ const productId = parsedUrl.query.id; console.log(`Product ID: ${productId}`); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(`Requested product has an ID of ${productId}.`); }else{ res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('Not found.'); } }); server.listen(8080, ()=>{ console.log('Listening on port 8080...'); }); ``` 此脚本利用了`url.parse()`函数将完整的URI拆分为各个组成部分并提取查询字符串作为键值对返回给开发者进一步操作[^2]。 另外,在更复杂的场景下可能还需要考虑POST提交的数据或者其他类型的HTTP请求方法(GET以外),这同样可以在回调函数内部根据不同条件分别对待[^3]。 对于更加复杂的应用程序结构设计而言,还可以引入中间件概念用于错误捕获、日志记录等功能扩展;同时也要注意安全性方面比如防止XSS攻击等问题的发生[^5]。 最后附上一段简单的完整版基于Express构建的小型网站服务端逻辑供参考[^4]: ```javascript const express=require('express'); let app=express(); app.set('view engine','ejs'); app.get('/',function(req,res){ res.render('index',{title:"Home"}); }); app.get('/about', function(req, res){ res.render('about',{title:'About Us'}); }); // Catch-all route for non-existent pages. app.use(function(req, res, next){ res.status(404).render('error',{message:"Page not found."}); }); var server = app.listen(3000,function(){ var host = server.address().address; var port = server.address().port; console.log("Example app listening at http://%s:%s",host,port); }); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值