文章分类 - NodeJS
摘要:废话不多说,直奔主题,要想通过 NodeJS 操作 Redis 需要借助一个第三方 npm 的 Redis 库 npm 官方地址:https://www.npmjs.com/package/redis/v/3.0.2 初始 NodeJS 工程 npm init -y 安装依赖 npm install
阅读全文
摘要:什么是包 包就是一个文件夹,用来管理模块与模块之间的各种关系 包的使用 安装包: npm install xxx 使用包: const xxx = require(xxx); 包的规范 package.json 必须在包的顶层目录下 二进制文件应该在 bin 目录下 JavaScript 代码应该在
阅读全文
摘要:首先我肯定不会一开始就给出该面试题的答案,我将会以一个小案例代码来引出该面试题,小案例代码如下: setTimeout(function () { console.log("setTimeout"); }); setImmediate(function () { console.log("setIm
阅读全文
摘要:通过上一篇 NodeJS-EventLoop和浏览器区别 的介绍当中有说到当同步代码执行就会去执行满足条件微任务代码,timers、poll、check 以此类推,如下我将会以一段代码的形式来演示一下这个过程,代码如下: setTimeout(function () { console.log("s
阅读全文
摘要:概述 和浏览器中一样 NodeJS 中也有 事件环(Event Loop),但是由于执行代码的 宿主环境 和 应用场景 不同,所以两者的事件环也有所不同: 扩展阅读:在 NodeJS 中使用 libuv 实现了 Event Loop 源码地址:https://github.com/libuv/lib
阅读全文
摘要:JS 是单线程的,JS 中的代码都是串行的,前面没有执行完毕后面不能执行 执行顺序 程序运行会从上至下依次执行所有的同步代码 在执行的过程中如果遇到异步代码会将异步代码放到 事件循环 中 当所有同步代码都执行完毕后,JS 会不断检测 事件循环 中的异步代码是否满足条件 一旦满足条件就执行满足条件的异
阅读全文
摘要:JS 是单线程的,JS 中的代码都是串行的,前面没有执行完毕后面不能执行 执行顺序 程序运行会从上至下依次执行所有的同步代码 在执行的过程中如果遇到异步代码会将异步代码放到 事件循环 中 当所有同步代码都执行完毕后,JS 会不断检测 事件循环 中的异步代码是否满足条件 一旦满足条件就执行满足条件的异
阅读全文
摘要:NodeJS 中的 this 为什么是一个空对象: 因为所有的 NodeJS 文件在执行的时候都会被包裹到一个函数中,this 都被修改为了空的 module.exports (function (exports, require, module, __filename, __dirname) {
阅读全文
摘要:源码如下: let path = require("path"); let fs = require("fs"); let vm = require("vm"); class BNTangModule { constructor(id) { // 保存当前模块的绝对路径 this.id = id;
阅读全文
摘要:在本章节的内容开始之前,先修改一下 Node.js 的版本因为高版本做了许多的优化,不利于讲解与学习,切换的版本如下: nvm install 6.17.1 nvm use 6.17.1 首先我自定义了一个模块,之前说了一个文件就是一个模块,新建一个 a.js 内容如下: exports.name
阅读全文
摘要:官方文档地址:http://nodejs.cn/api/ 通过这个模板可以提供一个安全的环境给我们来执行字符串中的代码。 runInThisContext 提供了一个安全的环境给我们执行字符串中的代码,runInThisContext 提供的环境不能访问本地的变量, 但是可以访问全局的变量(也就是
阅读全文
摘要:Node 模块 在 CommonJS 规范中 一个文件 就是 一个模块。 在 CommonJS 规范中暴露数据通过 exports 进行暴露。 在 CommonJS 规范中导入模块通过 require() 进行导入需要使用的模块。 Node 模块原理分析 既然一个文件就是一个模块, 既然想要使用模块
阅读全文
摘要:在我之前的 Web 文章当中介绍过一个模板引擎也就是 art-template 官方文档地址:https://aui.github.io/art-template/zh-cn/docs/index.html 接下来就使用这个模板来改造一下我之前的那个动态网站的案例吧,首先需要安装好 arte-tem
阅读全文
摘要:新建 index.html 内容如下所示 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <form action="./info.html" method
阅读全文
摘要:服务端区分用户发送的是GET请求和POST请求 通过 HTTP 模块的 http.IncomingMessage 类的 .method 属性即可区别 具体源码如下所示 let http = require("http"); // 1.创建一个服务器实例对象 let server = http.cre
阅读全文
摘要:拿到 POST 请求传递过来的参数 使用querystring模块 语法示例如下 querystring.parse(str[, sep[, eq[, options]]]) querystring.stringify(obj[, sep[, eq[, options]]]) querystring
阅读全文
摘要:拿到 GET 请求传递过来的参数 使用URL模块, 语法示例如下 url.format(urlObject) url.parse(urlString[, parseQueryString[, slashesDenoteHost]]) url.format(urlObject): 将路径转换为对象 u
阅读全文
摘要:let http = require("http"); let ss = require("./StaticServer.js"); // 1.创建一个服务器实例对象 let server = http.createServer(); // 2.注册请求监听 server.on("request",
阅读全文
摘要:在给浏览器返回数据的时候, 如果没有指定响应头的信息, 如果没有设置返回数据的类型, 那么浏览器不一定能正确的解析, 所以无论返回什么类型的静态资源都需要添加对应的响应头信息 注意点: 加载其它的资源不能写 utf8 如果服务器在响应数据的时候没有指定响应头, 那么在有的浏览器上, 响应的数据有可能
阅读全文
摘要:拿到用户请求路径之后, 只需要利用 fs 模块将对应的网页返回即可 let http = require("http"); let path = require("path"); let fs = require("fs"); // 1.创建一个服务器实例对象 let server = http.c
阅读全文