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
主要方法:
- querystring.parse(str[, sep[, eq[, options]]])
- 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'
// ...