前言
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于构建快速、可扩展的网络应用。它采用事件驱动、非阻塞 I/O 模型,使其特别适合实时数据处理和高并发场景。Node.js 能够利用单线程异步编程的优势,同时通过事件循环处理大量请求,从而提高应用程序的性能和吞吐量。通过 npm(Node 包管理器),开发者可以轻松访问丰富的开源库和工具,快速构建各种类型的应用,包括 Web 服务、后端 API、实时应用程序等。
接下来让我们初步认识node.js.
1.初始化
我们创建一个文件夹,在终端输入npm init -y初始化为后端文件。
然后我们引入一个好用的node框架express,采用npm i express.
这个时候就会发现我们的dependencies里多了这样子一个依赖。
express
javascript
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('welcone to node!!!')
})
app.listen(port, () => {
console.log('项目已启动在3000端口');
})
我们采用commonjs即默认的方式去引入这个模块然后进行实例化,我们用它来构建一个简单的web服务。我们在3000端口构建web端的服务,然后当前端采用默认的get方式去访问这个端口的时候打印welcone to node!!!。
我们去运行这份js,然后去进行这个端口的访问,就会发现它会弹出我们要的信息。
如果我们采用npx nodemon + 项目名称的话,每次修改端口响应时,就不需要重新跑一遍了,非常方便。
2.scripts
我们可以在这个里面添加指令去运行我们的代码。
比如我们添加了server,hello,dev三段指令。我们通过npm run + 指令 的方式去运行。
对应执行效果如下。
3.模块化
为了代码编写的优雅和效率,node编写中采用了模块化的思想。
commonjs
这是node官方提供的老版模块化方法。
javascript
function add(a, b) {
return a + b
}
function minus(a, b) {
return a - b
}
module.exports.add = add
module.exports.minus = minus
<------------------------------------------------------------------------->
const { add } = require('./a/b.js')
const { minus } = require('./a/b.js')
console.log(add(1, 2));
console.log(minus(1, 2));
我们在一个js文件里书写内容,然后module.exports进行挂载属性进行抛出,在另一个js文件里去结构得到抛出的对象属性就可以正常调用啦!
ESM
这是js官方为了方便和高效,也打造且被node官方兼容的语法规范,比commonjs发布时间要晚。
javascript
function add(a, b) {
return a + b
}
function minus(a, b) {
return a - b
}
export default {
add,
minus
}
-------------------------------------------
import model from './a/b.js'
console.log(model.add(1, 2));
我们采用export default的方式在接收时不需要解构,直接接收这个对象。
javascript
export function add(a, b) {
return a + b
}
export function minus(a, b) {
return a - b
}
---------------------------------
import { add, minus } from './a/b.js'
console.log(add(1, 2));
console.log(minus(1, 2));
当我们export抛出的时候,则要进行解构操作。
3.global
首先我们要记住一点浏览器的全局是window,而node里的全局是global,那么我们挂载在浏览器上的全局变量是可以直接用而不用window.a去使用的,因此我们global上的属性也是可以直接用的。
javascript
console.log(global);
global是一个对象
javascript
console.log(Object.getOwnPropertyNames(global));
我们还可以打印这个对象身上许多可以用的属性。
arduino
console.log(__dirname);
console.log(__filename);
分别代表当前js文件所在文件夹的绝对路径和当前文件的绝对路径。
less
console.log(Buffer.from('hello world'));
console.log(Buffer.from([0x68]));
console.log(Buffer.from('hello world').toString());
buffer流是node里提供的一种新的十六进制数据结构,我们可以进行把字符串转为buffer流,把十六进制数组转化为buffer流结构以及buffer流转为字符串的操作。
4.fs
ini
const fs = require('fs')
const fileContent = fs.readFileSync('./text.txt', 'utf-8')
console.log(fileContent);
我们通过引入这个fs对象来使用里面很多好用的方法实现对文件的读取和写入操作。
Sync表示的是同步进行读取。"utf-8"表示我们读取的形式,如果我们不采用这种形式最后读取到的数据就会是默认的buffer流。
arduino
fs.writeFileSync('./abc.md', 'hello world')
这是我们进行的同步写入操作,用于往文件里写入信息。
arduino
console.log(fs.statSync('./text.txt'));
我们也可以去获取我们文件的相关信息。