常用内置模块学习
先安装log4js
npm install log4js -D
1.url
// 常用内置模块
const log4js = require('log4js')
log4js.configure({
appenders: { cheese: { type: 'file', filename: 'cheese.log' } },
categories: { default: { appenders: ['cheese'], level: 'error' } }
})
var logger = log4js.getLogger('cheese')
logger.level = 'debug'
const url = require('url')
const urlString = 'https://www.baidu.com:443/path/index.html?id=2#tag=3'
logger.debug(url.parse(urlString))
const log4js = require('log4js')
const url = require('url')
log4js.configure({
appenders: { cheese: { type: 'file', filename: 'cheese.log' } },
categories: { default: { appenders: ['cheese'], level: 'error' } }
})
var logger = log4js.getLogger('cheese')
logger.level = 'debug'
const obj = {
protocol: 'https:',
slashes: true,
auth: null,
host: 'www.baidu.com:443',
port: '443',
hostname: 'www.baidu.com',
hash: '#tag=3',
search: '?id=2',
query: 'id=2',
pathname: '/path/index.html',
path: '/path/index.html?id=2',
href: 'https://www.baidu.com:443/path/index.html?id=2#tag=3'
}
logger.debug(url.format(obj))
日志打印输出:
[2021-03-16T21:28:53.242] [DEBUG] cheese - Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'www.baidu.com:443',
port: '443',
hostname: 'www.baidu.com',
hash: '#tag=3',
search: '?id=2',
query: 'id=2',
pathname: '/path/index.html',
path: '/path/index.html?id=2',
href: 'https://www.baidu.com:443/path/index.html?id=2#tag=3' }
[2021-03-16T21:32:08.562] [DEBUG] cheese - https://www.baidu.com:443/path/index.html?id=2#tag=3
2.resolve
// 常用内置模块
const log4js = require('log4js')
log4js.configure({
appenders: { cheese: { type: 'file', filename: 'cheese.log' } },
categories: { default: { appenders: ['cheese'], level: 'error' } }
})
var logger = log4js.getLogger('cheese')
logger.level = 'debug'
const url = require('url')
const urlString = 'https://www.baidu.com:443/path/index.html?id=2#tag=3'
logger.debug(url.resolve('http://www.baidu.com/a', '../'))
logger.debug(url.resolve('http://www.baidu.com/a', '/b'))
[2021-03-16T21:38:40.789] [DEBUG] cheese - http://www.baidu.com/
[2021-03-16T21:38:40.796] [DEBUG] cheese - http://www.baidu.com/b
const urlParams = new URLSearchParams(url.parse(urlString).search)
// logger.debug(urlParams)
logger.debug(urlParams.get('id'))
[2021-03-16T21:47:25.479] [DEBUG] cheese - 2
2.http
const http = require('http')
const https = require('https')
const log4js = require('log4js')
const querystring = require('querystring')
log4js.configure({
appenders: { cheese: { type: 'file', filename: 'cheese.log' } },
categories: { default: { appenders: ['cheese'], level: 'error' } }
})
var logger = log4js.getLogger('cheese')
logger.level = 'debug'
const server = http.createServer((request, response) => {
const url = request.url
// logger.debug(request)
// 默认是html
// response.writeHead(200, {
// 'content-type': 'text/plain'
// })
// response.write('<div>hello</div>')
// let data = ''
// request.on('data', (chunk) => {
// data += chunk
// })
// request.on('end', () => {
// response.writeHead(200, {
// 'content-type': 'application/json;charset=utf-8'
// })
// // logger.debug(data)
// response.write(JSON.stringify(querystring.parse(data)))
// response.end()
// })
https.get('https://www.xiaomiyoupin.com/mtop/market/cat/list', (result) => {
let data = ''
result.on('data', (chunk) => {
data += chunk
})
result.on('end', () => {
response.writeHead(200, {
'content-type': 'application/json;charset=utf-8'
})
// logger.debug(data)
response.write(data)
response.end()
})
})
// response.writeHead(200, {
// 'content-type': 'application/json;charset=utf-8'
// })
})
server.listen(8080, () => {
console.log('localhost:8080')
})
// node.js 进程管理工具
// supervisor
// nodemon 本地可以使用
// forever
// pm2
http demo
/*
node非常轻松的构建一个web服务器
在node中专门提供了一个核心内置模块 :http
http 这个模块的职责就是创建编写服务器的
*/
// 1. 加载 http 核心模块
var http = require('http')
// 2.使用 http.createServer() 方法创建一个 web 服务器
// 返回一个 Server 实例
var server = http.createServer()
// 3.服务器要干嘛?
// 提供服务: 对数据的服务
// 发请求
// 接收请求
// 处理请求
// 给个反馈(发送响应)
// 注册 request 请求事件
// 当客户端请求过来,就会自动触发服务器的 request 请求事件,然后执行第二个参数:回调处理
/*
request 请求事件处理函数,需要接受两个参数“
request 请求对象
请求对象可以用来获取客户端的一些请求信息,例如请求路径
response
响应对象可以用来给客户端发送响应消息
*/
server.on('request', function (request, response) {
// console.log('收到客户端的请求了')
// console.log('收到客户端的请求了,请求路径是:' + request.url)
/*
response 对象有一个方法:write 可以用来给可会端发送响应数据
write 可以使用多次,但是对吼一定要使用 end 结束响应 否则客户端一直在等待
*/
// response.write('hello')
// response.write('我说的话')
// 告诉客户端,我的话说完了,可以呈现给用户了
// response.end()
/*
由于现在我们的服务器的能力还非常弱,无论是什么请求,都只能响应 hello nodejs
思考:
我希望当请求不同的路径的时候响应结果不同
例如:
/ index 首页
/login 登录
/register 注册
/haha 哈哈哈
*/
switch (request.url) {
case '/':
response.write('index')
break
case '/login':
response.write('login')
break
case '/register':
response.write('register')
break
default:
response.write('not found')
}
response.end()
})
// 4. 绑定端口号,启动服务器
server.listen('3000', function () {
console.log('running:localhost:3000')
})
http demo 2
var http = require('http')
// 1.创建 Server
var server = http.createServer()
// 2.监听 request 请求事件,设置请求处理函数
server.on('request', function (req, res) {
console.log('收到请求了,请求路径是:' + req.url)
// 根据不同的请求路径发送不同的响应结果
/*
req.url 获取到的是端口号之后的内容
*/
// const urlStr = req.url
// switch (urlStr) {
// case '/login':
// res.write('登录')
// break
// case '/register':
// res.write('注册')
// break
// default:
// res.write('404 Not Found')
// }
// res.end()
if (req.url === '/product') {
var data = [
{
name: '1',
price: 299
},
{
name: '2',
price: 399
},
{
name: '3',
price: 499
}
]
/*
响应内容只能是二进制数据或者字符串
数字
对象
数组
布尔值
*/
res.end(JSON.stringify(data))
}
})
// 3.绑定端口号,启动服务
server.listen(3000, function () {
console.log('server running at: http://127.0.0.1:3000')
})