尼采般地抒情

公告栏

此网站主题为本人手写主题, 主题待开源···

站点信息

文章总数目: 305
已运行时间: 1063
目录
  1. Node.js使用
    1. node环境的一些特性
    2. node模块化及其使用
    3. process.env环境变量
    4. nodejs中的try...catch
  2. Node.js内置模块
    1. 全局对象global
    2. http;fs;url;querystring;path模块
    3. util+chalk 美化
  3. Node.js 异步的解决策略

尼采般地抒情

尼采般地抒情

公告栏

此网站主题为本人手写主题, 主题待开源···

站点信息

文章总数目: 305
已运行时间: 1063

Node.js使用

Node.js环境说白了就和浏览器一样,用来运行js,node借助终端,浏览器借助app展示HTML文件来展示js功能。具体运行在js文件的所在文件目录下运行 node xx.js即可。

不过一般全局下载nodemon三方模块,其作用是当js文件被改动,终端会再次执行该js文件,后续模块处再讲。

模块化开发分为两种:

  1. 前端网页使用JavaScript外链
  2. 使用nodejs加载模块化开发构建

Node.js实际上是模块化开发,由以下两方面组成:

  1. ECMAScript
  2. Node的模块API(又分为内置模块和三方模块)

node环境的一些特性

异步式I/O:提高效率,防止阻塞这种情况

事件式编程:注意事件循环机制

node模块化及其使用

参考之前写的文章:https://www.yuque.com/wztlink1013/blog/psazge#FPo3f

process.env环境变量

nodejs的顶层对象process下的环境变量设置与使用

nodejs中的try...catch

写异常的捕获的时候,要时刻注意一些异步执行的代码,比如一种场景是try里面的代码是异步操作,那么再执行异步的时候,就已经执行了catch里面的报警语句了,学会查看捕获的目标代码是哪段。

具体参考:https://www.cnblogs.com/surfer/p/10291609.html

Node.js内置模块

全局对象global

Node.js和之前学过的浏览器对象区分之就是,浏览器中全局对象是window,但是Node.js的全局对象是global(也可以不写、省略)。


  • process对象:关于进程的一个对象,也是global的属性之一,是一个和操作系统的简单接口。重点了解nextTick()函数,这个函数可以将事件循环设置一个任务,提高运行效率

  • console对象:log在控制台中输出;error输出错误信息;trace输出错误信息调用栈(就是错在什么地方)
  • setTimeout()     设置超时定时器
  • clearTimeout()  清除超时时定时器
  • setInterval()      设置间歇定时器
  • clearInterval()   清除间歇定时器

http;fs;url;querystring;path模块

参考:https://blog.guowenfh.com/2016/10/15/node-http

  • http,原生创建web服务
  • url解析url,querystring处理url参数,搭配使用
  • fs模块用来读取文件、写入文件等
  • path路径操作,一般都是路径字符串拼接join,__dirname当前目录名
/*

- @Author: wztlink1013
- @Date: 2022-01-10 16:26:41
- @LastEditTime: 2022-01-10 19:49:43
- @Description:
  \*/
  let http = require('http')
  let url = require('url')
  let fs = require('fs')
  let queryString = require('querystring')

let server = http.createServer()
// 读取我们当前文件所在的目录下的 html 文件夹
let HtmlDir = \_\_dirname + '/html/'

server.on('request', function (req, res) {
let urlObj = url.parse(req.url)
console.log('【请求 url 信息】', urlObj)
let params = queryString.parse(urlObj.query)
console.log('【url 参数】', JSON.stringify(params))

switch (urlObj.pathname) {
case '/':
//首页
sendData(HtmlDir + 'index.html', req, res)
break
case '/user':
//用户首页
sendData(HtmlDir + 'user.html', req, res)
break
default:
//处理其他情况
sendData(HtmlDir + 'err.html', req, res)
break
}
})

/\*\*

- 读取 html 文件,响应数据,发送给浏览器
- @param {String} file 文件路径
- @param {Object} req request
- @param {Object} res response 对象
  \*/
  function sendData(file, req, res) {
  fs.readFile(file, function (err, data) {
  if (err) {
  res.writeHead(404, {
  'content-type': 'text/html;charset=utf-8',
  })
  res.end('<h1>你要找的页面不见了~</h1>')
  } else {
  res.writeHead(200, {
  'content-type': 'text/html;charset=utf-8',
  })
  res.end(data)
  }
  })
  }
  server.listen(8888)
  console.log('Server is running at http://127.0.0.1:8888/')

util+chalk 美化

  • util.inherits

不过感觉这个已经没有多大必要了,这个是实现原型间继承的相关封装,但是现在 ES6 已经有了 class 的概念了(虽然底层还是之前那套),这个工具用的不多

  • util.inspect

目的就是将对象转换为字符串,比如将错误信息更加美观的展示在控制台,就可以自定义,但是可以直接用 chalk 模块在实现这个美化控制台输出的工作。

'use strict';

const chalk = require('chalk');

module.exports = {
info(...args) {
const prefix = chalk.green('[INFO]');
args.unshift(prefix);
console.log.apply(console, args);
},
warn(...args) {
const prefix = chalk.yellow('[WARNING]');
args.unshift(prefix);
console.log.apply(console, args);
},
error(...args) {
const prefix = chalk.red('[ERROR]');
args.unshift(prefix);
console.log.apply(console, args);
},
};
out.info(`Current yuque-hexo-lyrics version is ${chalk.yellow(pkg.version)}, and the latest version is ${chalk.green(update.latest)}. Please update!`);
out.info('View more detail: https://github.com/wztlink1013/yuque-hexo-lyrics#changelog');

Node.js 异步的解决策略

参考:

  • 传统的解决方案:async await 等
  • 嵌套使用

评论区

Twikoo giscus