node基础:初始化你的后端项目

前言

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境。它允许我们使用 JavaScript 在服务器端运行脚本,创建动态网页内容,而不仅仅是局限于浏览器端。Node.js 使用了事件驱动、非阻塞式 I/O 模型,使其轻量且高效,特别适用于数据密集型的实时应用,如实时聊天应用、实时通知推送、在线游戏服务器等。对于今后的全栈开发来说,熟悉掌握并且运用node进行开发是必不可少的。

说人话就是:node是用c/c++打造的js引擎,他能读懂js并且让js有跟操作系统打交道的能力

学习node.js少不了查阅官方文档,在node.js的官方文档中,node.js的安装教程和使用方法,各种指令等等都十分详尽。我将带大家一步步了解并运用它。

Node.js 中文网 (nodejs.cn)

初始化后端

运用以下指令初始化我们的后端项目

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.exportsexports对象导出模块中的功能,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.exportsexports对象来导出模块中的变量、函数、类等的方法
  • 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模块是专门操作文件的模块,这里简单介绍他的三个基本作用。

  1. 读取某文件中的数据

当你需要从一个文件中读取内容时,可以选择使用readFile()(异步)或readFileSync()(同步)方法,,通过指定文件的路径和编码格式(选择正确的阿斯克码;如'utf-8'以正确处理中文)。

当我我在text.txt文件中写入一堆中文后,我可以通过以下方法读取这个文件的内容:

js 复制代码
const fs = require('fs');

//同步读取,识别成中文
const content = fs.readFileSync('./text.txt', 'utf-8')  

console.log(content);
  1. 创建并写入(修改)文件

fs模块同样提供了写入文件的功能。如果文件已存在,使用writeFileSync()(同步)或writeFile()(异步)方法会覆盖原有内容;如果文件不存在,则会创建新文件并写入数据。

示例:使用writeFileSync创建或修改文件

js 复制代码
const fs = require('fs'); 
// 创建或修改文件,写入'hello world',并指定编码为'utf-8' 
fs.writeFileSync('./text.txt', 'hello world', 'utf-8');
  1. 查看文件的详细信息

除了基本的读写操作外,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());
相关推荐
hlsd#24 分钟前
go mod 依赖管理
开发语言·后端·golang
四喜花露水27 分钟前
Vue 自定义icon组件封装SVG图标
前端·javascript·vue.js
陈大爷(有低保)28 分钟前
三层架构和MVC以及它们的融合
后端·mvc
亦世凡华、29 分钟前
【启程Golang之旅】从零开始构建可扩展的微服务架构
开发语言·经验分享·后端·golang
河西石头30 分钟前
一步一步从asp.net core mvc中访问asp.net core WebApi
后端·asp.net·mvc·.net core访问api·httpclient的使用
前端Hardy36 分钟前
HTML&CSS: 实现可爱的冰墩墩
前端·javascript·css·html·css3
2401_8574396941 分钟前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧66643 分钟前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
李老头探索44 分钟前
Java面试之Java中实现多线程有几种方法
java·开发语言·面试
阿华的代码王国1 小时前
【SpringMVC】——Cookie和Session机制
java·后端·spring·cookie·session·会话