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
image

检查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)

image

程序执行

>node index.js

Timer定时器

setTimeout(callback, delay[, ...args])#

新增于: v0.0.1
callback 当定时器结束时调用的函数。
delay 调用 callback 之前等待的毫秒数。
...args 调用 callback 时要传入的可选参数。
返回: 用于 clearTimeout()
在 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 调用 callback 之前等待的毫秒数。
...args 调用 callback 时要传入的可选参数。
返回: 用于 clearInterval()
每 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; //导出函数

image

模块导入与函数引用

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

 

image

旧版的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", "你好,我是小红");

 

文件读写

image

同步操作

image

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

异步操作

image

流和管道

Web服务器输出内容

模块化组织代码

代码分离

image

主要代码

image

服务器启动代码打包

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
};
//导出多个函数对象

 

image

启动服务
image

image

路由

通过地址不同返回不同的数据
image

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
}; //导出多个函数对象

 

image
image
image

重构路由代码

npm

nodemon

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

npm install -g nodemon

posted @ 2024-08-12 14:43  半拉文化人丶  阅读(50)  评论(1)    收藏  举报