Node.js使用

Node.js环境说白了就和浏览器一样,用来运行js,node借助终端,浏览器借助展示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下的环境变量设置与使用
  • 参考:https://juejin.cn/post/6972466143445385223

    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()函数,这个函数可以将事件循环设置一个任务,提高运行效率

image.png

  • 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当前目录名 ```javascript /*
    • @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, {
    1. 'content-type': 'text/html;charset=utf-8',
    }) res.end(‘

    你要找的页面不见了~

    ‘) } else { res.writeHead(200, {
    1. '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模块在实现这个美化控制台输出的工作。

  1. 'use strict';
  2. const chalk = require('chalk');
  3. module.exports = {
  4. info(...args) {
  5. const prefix = chalk.green('[INFO]');
  6. args.unshift(prefix);
  7. console.log.apply(console, args);
  8. },
  9. warn(...args) {
  10. const prefix = chalk.yellow('[WARNING]');
  11. args.unshift(prefix);
  12. console.log.apply(console, args);
  13. },
  14. error(...args) {
  15. const prefix = chalk.red('[ERROR]');
  16. args.unshift(prefix);
  17. console.log.apply(console, args);
  18. },
  19. };
  1. out.info(`Current yuque-hexo-lyrics version is ${chalk.yellow(pkg.version)}, and the latest version is ${chalk.green(update.latest)}. Please update!`);
  2. out.info('View more detail: https://github.com/wztlink1013/yuque-hexo-lyrics#changelog');

Node.js三方模块

第三方模块的两种存在形式:

  1. 以js文件的形式存在,提供实现项目具体功能的API接口。

比如使用jQuery,html中引入CDN超链接即可使用。

  1. 以命令行工具形式存在,辅助项目开发。

比如VUE-CLI工具。

npm是用来管理模块的一个node工具,它会伴随着node的下载而一同下载。

node生态的繁荣多益于很多优秀的三方模块的存在,具体可以查看 NoderSurvey 2021 年度报告 的相关统计与调研。在此记录一下在学习以及实际开发过程中自己所学习到的三方模块,特别地,express三方模块是一个web应用框架,需要学习的点较多,单独拿出来详细学习。

cnpm+淘宝镜像

因为npm是处于国外的服务器,下载模块有时候可能会较慢,特别是文件比较多的模块。以下是临时使用淘宝镜像下载的命令。

  1. npm --registry https://registry.npm.taobao.org install

如果不想改变npm源,也可以直接使用cnpm(推荐)

  1. // 安装cnpm命令,不会改变npm的源
  2. npm install -g cnpm --registry=https://registry.npm.taobao.org
  3. //使用
  4. cnpm install
  5. //查看源,可以看到设置过的所有的源
  6. npm config get registry
  • 参考:https://www.cnblogs.com/sese/p/9297028.html

    nodemon模块

    1. cnpm install nodemon g
    作用:在开发过程中,修改了文件,控制台命令行就会根据文件的修改自动运行
    使用方法:将运行命令中的node换成nodemon

    gulp模块

    基于node平台开发的前端构建工具,将机械化操作编写成任务,想要执行机械化操作时执行一个命令行命令任务就能自动执行了,用机器代替手工,提高开发效率。
    具体的还有webpack,后续继续学习。

作用:

  • 项目上线,HTML、CSS、JS文件压缩合并
  • 语法转换(es6、less …)
  • 公共文件抽离
  • 修改文件浏览器自动刷新

glup本身提供的api函数很少,官网到目前更新只有下面几个,具体使用方法,使用的时候去查

gulp生态也有很多插件,根据插件下载相应需要的功能插件

  • gulp-htmlmin :html文件压缩
  • gulp-csso :压缩css
  • gulp-babel :JavaScript语法转化
  • gulp-less: less语法转化
  • gulp-uglify :压缩混淆JavaScript
  • gulp-file-include 公共文件包含
  • browsersync 浏览器实时同步

    ws模块

    ws(GitHub地址)是Node.js的npm实现,以便在项目中使用。

什么是WebSocket?
WebSocket是一个长连接,客户端可以给服务端发送消息,服务端也可以给客户端发送消息,两者频繁的发送消息,全双工通信模式。

参考:https://blog.csdn.net/LiMubai_CN/article/details/81844156

cross-env模块

windows不支持NODE_ENV=development的设置方式
所以使用该模块来进行跨平台地使用环境变量,兼容各平台使用

sharedb模块

ShareDB 是一个整合了前后端的 OT 框架,可以很方便地自行搭建服务端和客户端。框架基于 Node.JS 实现。

OT(Operational transformation)是一种支持高级协作软件系统中的一系列协作功能的技术。OT 最初是为了在纯文本文档的协作编辑中实现一致性维护和并发控制而发明的。它的功能已得到扩展,其应用程序已扩展至包括组撤消、锁定、冲突解决、操作通知和压缩、组感知、HTML/XML 和树状结构文档编辑、协作办公生产力工具、应用程序共享和协作计算机- 辅助媒体设计工具。[1] 2009 年,OT 被采用为Apache Wave协作功能背后的核心技术和谷歌文档。

sharedb-mongo模块

uuid模块

生成唯一的一个字符串

  • v3:基于名字的 用相同的名字,会生成相同的uuid出来

npm的node-uuid和uuid