常用内置模块-06学习

常用内置模块学习

先安装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')
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值