前言
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境。它允许我们使用 JavaScript 在服务器端运行脚本,创建动态网页内容,而不仅仅是局限于浏览器端。Node.js 使用了事件驱动、非阻塞式 I/O 模型,使其轻量且高效,特别适用于数据密集型的实时应用,如实时聊天应用、实时通知推送、在线游戏服务器等。对于今后的全栈开发来说,熟悉掌握并且运用node进行开发是必不可少的。
说人话就是:node是用c/c++打造的js引擎,他能读懂js并且让js有跟操作系统打交道的能力
学习node.js少不了查阅官方文档,在node.js的官方文档中,node.js的安装教程和使用方法,各种指令等等都十分详尽。我将带大家一步步了解并运用它。
初始化后端
运用以下指令初始化我们的后端项目
js
npm init -y
在指令输出后我们将会生成 package.json 文件
这个文件相当于是我们开发的说明书,我们可以清楚的看到项目的名称name,版本,项目描述和作者等等。我们可以对这个文件做出更改或添加说明。
安装node的开发框架
express 是一个基于 Node.js 平台,快速、开放、极简的 web 应用框架。它提供了一系列强大的特性来帮助我们创建各种 Web 和移动设备应用。Express 框架是在 Node.js 的 http 模块之上构建的一个更高级的抽象层,它允许我们更快地开发复杂的 web 应用。
js
npm i express
我们同样可以通过 npm uninstall express 卸载这个包。卸载后在node_modules中的express依赖包将被移除。
当我们着手开发一个新项目而不太确定具体步骤时,查阅相关文档是一个极好的起点。特别是在决定需要安装哪些包或依赖来辅助开发时,npm.js的官方文档成为了一个不可或缺的资源。通过搜索npm.js上的安装包或依赖项,我们可以找到详尽的说明、使用指南以及社区贡献的教程,这些都能指导我们按照步骤逐步推进项目开发。因此,利用npm.js官方文档,我们能够确保在开发过程中安装并配置好所有必要的工具与库,从而顺利地进行项目构建。 npm | Home (npmjs.com)
开发你的后端项目
创建入口文件index.js,引入express包,创建express实例对象;创建端口,向端口发送请求,使用 app.listen(port,()=>{}) 监听这个端口。
js
const express = require('express');
const app = express();
const port = 3000
app.get('/', (req, res) => {
res.send(' 恭喜第一次启动后端项目!')
})
app.listen(port, () => {
console.log('项目运行在3000端口')
})
在浏览器访问你访问的端口:localhost:3000
恭喜你第一次启动后端项目!
在浏览器中通过检查打开后台,我们同样可以观察到我们后端项目的启动
当你觉得每次启动后端项目都要重新敲index.js太麻烦时,我们可以通过另一种方式------------通过调试 package.json文件中的scripts
去创造你想要的指令。
例如,我在scripts
中输入 "dev": " node index.js"
后,就能通过npm run dev替代node index.js启动项目。
在你后端项目需要不断调试时可以使用npx nodemon .\index.js
指令,他运行你的后台实时刷新。
模块化
在Node.js中,模块系统占据了核心地位,它赋予开发者将代码划分为独立且可复用的单元的能力。这种模块化设计显著提升了代码的组织性、可维护性和可重用性。尽管存在包括CommonJS、AMD、CMD、UMD和ESM在内的多种模块规范,但Node.js主要采用的是CommonJS规范作为其模块化的基石。通过require()
函数同步加载模块,并使用module.exports
或exports
对象导出模块中的功能,Node.js的CommonJS模块系统为开发者提供了一个强大而灵活的代码组织方式。
如何使用模块语法?
CommonJS模块语法
如,当我在function.js文件中定义了两个方法时,我需要使用将他抛出,在到另一个文件中使用。
js
function add(a, b) {
return a + b
}
function minus(a, b) {
return a - b
}
module.exports = { add, minus }
// 还可以通过module.exports.add = add,module.exports.minus = minus抛出
// 可以直接通过exports.add = add抛出
js
const { add, minus } = require('./function')
console.log(add(1, 2), minus(1, 2))
- CommonJS的node环境通过使用
require()
函数来同步加载模块,并通过module.exports
或exports
对象来导出模块中的变量、函数、类等的方法 - ESM中,使用
import
语句来导入模块,使用export
语句来导出模块的方法混用。
在文件开发中两种规范不能重用,因为他们互不兼容。但是我们可以通过在package.json
文件中设置"type": "module"
来实现使用ESM规范。
这意味着可以通过 export default方法导出函数等等
ESM(JS原生)模块语法
方法一: 当抛出的是一个对象时,你可以自定义一个变量名来导入模块中的默认内容。
js
// 导出文件
function add(a, b) {
return a + b
}
function minus(a, b) {
return a - b
}
export default {
add, minus
}
js
// 引入文件
import module from './function.js'
console.log(module)
方法二: 当使用命名导出时,需要使用import
关键字后跟大括号{}
,并在其中列出要导入的命名导出项。
js
// 导出文件
export function add(a, b) {
return a + b
}
export function minus(a, b) {
return a - b
}
js
// 引入文件
import { add, minus } from './function.js'
console.log(add(1, 2), minus(1, 2))
node中的模块------fs模块
node中的fs模块是专门操作文件的模块,这里简单介绍他的三个基本作用。
- 读取某文件中的数据
当你需要从一个文件中读取内容时,可以选择使用readFile()
(异步)或readFileSync()
(同步)方法,,通过指定文件的路径和编码格式(选择正确的阿斯克码;如'utf-8'
以正确处理中文)。
当我我在text.txt文件中写入一堆中文后,我可以通过以下方法读取这个文件的内容:
js
const fs = require('fs');
//同步读取,识别成中文
const content = fs.readFileSync('./text.txt', 'utf-8')
console.log(content);
- 创建并写入(修改)文件
fs
模块同样提供了写入文件的功能。如果文件已存在,使用writeFileSync()
(同步)或writeFile()
(异步)方法会覆盖原有内容;如果文件不存在,则会创建新文件并写入数据。
示例:使用writeFileSync
创建或修改文件
js
const fs = require('fs');
// 创建或修改文件,写入'hello world',并指定编码为'utf-8'
fs.writeFileSync('./text.txt', 'hello world', 'utf-8');
- 查看文件的详细信息
除了基本的读写操作外,fs
模块还允许你获取文件的详细信息,如文件大小、创建时间、修改时间等。这可以通过statSync()
(同步)或stat()
(异步)方法实现。
示例:使用statSync
查看文件详细信息
要获取text.txt
文件的详细信息,你可以使用statSync
方法。这将返回一个fs.Stats
对象,包含了文件的多种属性。
js
const fs = require('fs');
// 获取文件详细信息
const stats = fs.statSync('./text.txt');
console.log(stats);
// 输出文件的详细信息,如大小、创建时间等
如下图为查询到的文件的详细创建时间,数据大小等等信息
global属性
我们可以通过Object.getOwnPropertyNames() 访问一个对象上的所有属性
js
console.log(Object.getOwnPropertyNames(global));
在这些属性中有几个特殊的属性
-
我们可以通过
__dirname
和__filename
去访问当前文件夹和当前文件所在的位置。 -
我们可以通过
process
查看有关当前Node.js进程的信息和控制能力。题外话,看懂process你就会发现------------vue.js的脚手架就是node.js写的。 -
Buffer
是node.js另外打造的一种数据模式,提供了一种用于处理二进制数据的方式。你可以使用Buffer.alloc(1024)
初始化大小为1kb的数据流时终端中会显示如下16进制的Buffer流。
他还可以通过 Buffer.from() 将字符串或数组转换为Buffer流类型
js
console.log(Buffer.from('hello world'));
console.log(Buffer.from([68]));
对应,上为转换后的字符串,下为数组:
Buffer上也提供了转换回字符串的方法:
js
const buf = Buffer.from('hello world');
console.log(buf.toString());