Node.js - http模块 、 url模块 和 querystring模块

http模块

Node.js 可以做到不借助 Apache、Nginx 等来搭建 HTTP 服务器,Nodejs提供了http模块,自身就可以用来构建服务器。

文档地址:HTTP

搭服务器:

创建 app.js文件;
命令行运行:node app.js;
打开浏览器输入:http://127.0.0.1:8081/

// app.js
var http = require('http');
var url = require('url');
http.createServer(function(request, response) {
    let data = '';
    request.on('data', (chunk) => {
        data += chunk;
    })

    request.on('end', function() {
        let method = request.method;
        let myUrl = request.url;

        // console.log(myUrl);
        // if (myUrl != '/favicon.ico') {
        //     console.log('name:', url.parse(myUrl, true).query.name);
        //     console.log('age:', url.parse(myUrl, true).query.age);
        // }

        let headers = JSON.stringify(request.headers);
        let httpVersion = request.httpVersion;
        // 设置响应头
        response.writeHead(200, {
            "Content-Type": "text/html;charset=UTF-8"
        });
        // response.write('<head><meta charset="utf-8"></head>');
        // response.write('<h2>NODEJS你好</h2>');

        let dataHtml = '<p>data:' + data + '</p>';
        let methodHtml = '<p>method:' + method + '</p>';
        let urlHtml = '<p>url:' + myUrl + '</p>';
        let headersHtml = '<p>headers:' + headers + '</p>';
        let httpVersionHtml = '<p>httpVersion:' + httpVersion + '</p>';

        let resData = dataHtml + methodHtml + urlHtml + headersHtml + httpVersionHtml;

        response.end(resData);

    })


}).listen(8081);

console.log('Server running at http://127.0.0.1:8081/');

url模块

对 url 对象进行进一步的解析操作。
一个 URL 字符串是一个结构化的字符串,它包含多个有意义的组成部分。 当被解析时,会返回一个 URL 对象,它包含每个组成部分作为属性。
url模块提供了两套API来处理URLs:一个是Node.js遗留的特有的API,另一个则是通常使用在web浏览器中 实现了WHATWG URL Standard的API.
请注意: 虽然Node.js遗留的特有的API并没有被弃用,但是保留的目的是用于向后兼容已有应用程序。因此新的应用程序请使用WHATWG API。

文档地址:URL

用法解析:

代码运行步骤同上。

// 传统方式已弃用(Nodejs文档标识说已弃用...?):
// 传统的 urlObject:
// The legacy urlObject (require('url').Url) is created and returned by the url.parse() function.
// const url = require('url');
// let api = "http://www.jilyz.com?name=zhangsan&age=13";
// console.log(url.parse(api, true));
// console.log('--------------name:', url.parse(api, true).query.name);
// console.log('--------------age:', url.parse(api, true).query.age);

// WHATWG 的 URL 接口
const myUrl = new URL('http://www.jilyz.com:110?name=zhangsan&age=13');
console.log('myUrl:', myUrl);
console.log(myUrl.search);
myUrl.searchParams.sort();
console.log('search:', myUrl.search);
console.log('searchParams:', myUrl.searchParams);
console.log('searchParams:', myUrl.searchParams.toString());

console.log('-----------------------------------');
// URLSearchParams 类
const myURL = new URL('https://example.org/?abc=123');
console.log(myURL.searchParams.get('abc'));
// 打印 123

myURL.searchParams.append('abc', 'xyz');
console.log(myURL.href);
// 打印 https://example.org/?abc=123&abc=xyz

myURL.searchParams.delete('abc'); // 删除全部的abc参数名的值
myURL.searchParams.set('a', 'b');
// myURL.searchParams.set('b', 'c');
console.log(myURL.href);
// 打印 https://example.org/?a=b

const newSearchParams = new URLSearchParams(myURL.searchParams);
// 上面的代码等同于:
// const newSearchParams = new URLSearchParams(myURL.search);

newSearchParams.append('a', 'c');
console.log(newSearchParams);
console.log(myURL.href);// 对 newSearchParams 操作不会影响到 myURL
// 打印 https://example.org/?a=b
console.log('SearchParams.toString():', newSearchParams.toString());
// 打印 a=b&a=c

// newSearchParams.toString() 会被隐式调用。
myURL.search = newSearchParams;
console.log(myURL.href);
// 打印 https://example.org/?a=b&a=c
newSearchParams.delete('a');
console.log(newSearchParams);
console.log(myURL.href);
// 打印 https://example.org/?a=b&a=c

querystring模块

提供用于解析和格式化 URL 查询字符串的实用工具。 可以使用以下方式访问它:const querystring = require(‘querystring’);

文档地址:querystring

主要方法:

  1. querystring.parse(str[, sep[, eq[, options]]])
  2. querystring.stringify(obj[, sep[, eq[, options]]])

注意:querystring.parse() 方法返回的对象不是原型地继承自 JavaScript 的 Object。 这意味着典型的 Object 方法如 obj.toString()、 obj.hasOwnProperty() 等都没有被定义并且不起作用。

const querystring = require('querystring');
// WHATWG 的 URL 接口
const myUrl = new URL('http://www.jilyz.com:110?name=zhangsan&age=131');
// console.log('myUrl:', myUrl);
console.log(myUrl.search);
myUrl.searchParams.sort();
console.log('search:', myUrl.search);
console.log('searchParams:', myUrl.searchParams);
let FUrl = myUrl.searchParams.toString()
console.log('searchParams.tostring:', FUrl);
let myFUrl = querystring.parse(FUrl);
console.log(myFUrl);
// console.log(myFUrl.toString()); // 报错
// ...
querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
// 返回 'foo=bar&baz=qux&baz=quux&corge='

querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':');
// 返回 'foo:bar;baz:qux'
// ...
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值