Node.js使用
Node.js环境说白了就和浏览器一样,用来运行js,node借助终端,浏览器借助app展示HTML文件来展示js功能。具体运行在js文件的所在文件目录下运行 node xx.js
即可。
不过一般全局下载nodemon三方模块,其作用是当js文件被改动,终端会再次执行该js文件,后续模块处再讲。
模块化开发分为两种:
- 前端网页使用JavaScript外链
- 使用nodejs加载模块化开发构建
Node.js实际上是模块化开发,由以下两方面组成:
- ECMAScript
- 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等
- 嵌套使用
评论区