node.js 学习
VSCode 的插件 Fitten Code,Fitten Code 是由非十大模型驱动的 AI 编程助手,它可以自动生成代码,提升开发效率,帮您调试 Bug,节省您的时间,另外还可以对话聊天,解决您编程碰到的问题。
https://www.runoob.com/nodejs/fitten-code-nodejs.html#post-25998-10
更改node.js的环境变量
https://blog.csdn.net/Nicolecocol/article/details/136788200
node.js开发文档
https://nodejs.cn/api/
最常用的ES6特性
let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arguments
https://segmentfault.com/a/1190000004365693
Linux 上安装 Node.js
https://blog.csdn.net/qq_40743057/article/details/139139574
直接使用已编译好的包
wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz // 下载
tar xf node-v10.9.0-linux-x64.tar.xz // 解压
cd node-v10.9.0-linux-x64/ // 进入解压目录
./bin/node -v // 执行node命令 查看版本
v10.9.0
解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接:
ln -s /usr/software/nodejs/bin/npm /usr/local/bin/
ln -s /usr/software/nodejs/bin/node /usr/local/bin/
ln -s source target //ln -s:表示创建一个软连接;target:表示目标文件(夹)【即被创建的文件(夹)】source:表示当前已存在的文件(夹)名【故称之为源】
rm -rf ./test_chk_ln/ 会删除文件夹下的所有内容,但是没有删除这个链接;
rm -rf ./test_chk_ln 则是仅删除这个软链接,不会删除下面的内容。
配置环境变量
vim /etc/profile
在文件底部新增如下两行内容
export NODE_HOME=/root/node-v18.20.3-linux-x64/bin/
export PATH=\(PATH:\)NODE_HOME:/usr/local/bin/
刷新环境配置,使变量文件生效
source /etc/profile

检查node及npm版本
node -v
npm -v
Node.js REPL(交互式解释器)
Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Windows 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。
Node 自带了交互式解释器,可以执行以下任务:
读取 - 读取用户输入,解析输入的 Javascript 数据结构并存储在内存中。
执行 - 执行输入的数据结构
打印 - 输出结果
循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。
Node 的交互式解释器可以很好的调试 Javascript 代码。
REPL 命令
-
ctrl + c - 退出当前终端。
-
ctrl + c 按下两次 - 退出 Node REPL。
-
ctrl + d - 退出 Node REPL.
-
向上/向下 键 - 查看输入的历史命令
-
tab 键 - 列出当前命令
-
.help - 列出使用命令
-
.break - 退出多行表达式
-
.clear - 退出多行表达式
-
.save filename - 保存当前的 Node REPL 会话到指定文件
-
.load filename - 载入当前 Node REPL 会话的文件内容。
停止 REPL
前面我们已经提到按下两次 ctrl + c 键就能退出 REPL:
$ node
>
(^C again to quit)
>
程序执行
>node index.js
Timer定时器
setTimeout(callback, delay[, ...args])#
新增于: v0.0.1
callback
delay
...args
返回:
在 delay 毫秒后调度单次的 callback 的执行。
callback 可能不会在精确的 delay 毫秒内被调用。 Node.js 不保证回调将触发的确切时间,也不保证它们的顺序。 回调将在尽可能接近指定的时间时调用。
当 delay 大于 2147483647 或小于 1 时,则 delay 将设置为 1。 非整数延迟被截断为整数。
如果 callback 不是函数,则将抛出 TypeError。
此方法具有可使用 util.promisify() 获得的 promise 的自定义变体。
setTimeout(function(){
console.log("timeout");
},3000);
延时三秒控制台打印 timeout
setInterval(callback, delay[, ...args])#
callback
delay
...args
返回:
每 delay 毫秒调度重复执行 callback。
当 delay 大于 2147483647 或小于 1 时,则 delay 将设置为 1。 非整数延迟被截断为整数。
如果 callback 不是函数,则将抛出 TypeError。
setInterval(function(){
console.log("interval");
},1000);
每间隔一秒打印 interval
Common.js规范
模块导出
var adder = function(a,b){ //自定义函数
return ``this num of the 2 numbers is ${a+b}`;
}
module.exports = adder; //导出函数

模块导入与函数引用
const adder = require('./index.js'); //引入函数
console.log(adder(2,3)); //引用函数

events事件触发器
eventEmitter事件监听器
var events = require("events")//引入events模块 var eventEmitter = new events.EventEmitter() //创建事件触发器 eventEmitter.on("someEvent",function(a){ console.log("someEvent事件触发,参数为"+a) //监听someEvent事件,并打印参数a })eventEmitter.emit("someEvent","参数a") //触发someEvent事件,并传入参数a

旧版的util.inherits()
var evevts =require("events"); var util = require("util");var person = function(name){
this.name = name;
}util.inherits(person,evevts.EventEmitter);//继承EventEmitter类
var xiaoming = new person("小明");
var xiaohong = new person("小红");var person = [xiaoming,xiaohong];
person.forEach(function(item){
item.on("speak",function(msg){
console.log(item.name+":"+msg);
});
});xiaoming.emit("speak","你好,我是小明");
xiaohong.emit("speak","你好,我是小红");

ES2015 类语法和 extends 关键字
const EventEmitter = require('events');//引入events模块
class Person extends EventEmitter { //创建Person类,继承EventEmitter类
constructor(name) { //构造函数
super(); //调用父类的构造函数
this.name = name; //定义name属性
}
}
var xiaoming = new Person("小明");
var xiaohong = new Person("小红");
var persons = [xiaoming, xiaohong];
persons.forEach(function (item) { //遍历persons数组,为每个元素添加监听事件
item.on("speak", function (msg) {
console.log(item.name + "say:" + msg);
});
});
xiaoming.emit("speak", "你好,我是小明");
xiaohong.emit("speak", "你好,我是小红");

文件读写

同步操作

同步操作按照执行顺序执行运行快的会等运行慢的执行后再执行
异步操作

流和管道
Web服务器输出内容
模块化组织代码
代码分离

主要代码

服务器启动代码打包
var http = require("http"); var data = require("./data.json"); function startServer() { var server = http.createServer(function (req, res) {//回调函数 res.writeHead(200, { "Content-Type": "application/json" }); res.end(JSON.stringify(data));//返回json数据 }); server.listen(3000,"127.0.0.1"); //监听端口 console.log("Server running at http://127.0.0.1:3000");//提示信息 }// moudle.exports = startServer; //导出单个函数
module.exports = {
startServer
}; //导出多个函数对象

启动服务


路由
通过地址不同返回不同的数据

var http = require("http"); var data = require("./data.json"); function startServer() { var server = http.createServer(function (req, res) {//回调函数 res.writeHead(200, { "Content-Type": "application/json" }); res.end(JSON.stringify(data));//返回json数据 }); server.listen(3000,"127.0.0.1"); //监听端口 console.log("Server running at http://127.0.0.1:3000");//提示信息 } // moudle.exports = startServer; //导出单个函数 module.exports = { startServer }; //导出多个函数对象



重构路由代码
npm
nodemon
nodemon用来监视node.js应用程序中的任何更改并自动重启服务,非常适合用在开发环境中。每次修改js代码后不用重启
安装命令
npm install -g nodemon



浙公网安备 33010602011771号