尼采般地抒情

尼采般地抒情

尼采般地抒情

音乐盒

站点信息

文章总数目: 321
已运行时间: 1782

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等
  • 嵌套使用

评论区

什么都不舍弃,什么也改变不了