Node.js迈向后端世界:从"Hello World"到"Hello Backend!"

前言

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'));

我们也可以去获取我们文件的相关信息。

相关推荐
sg_knight2 分钟前
VSCode如何修改默认扩展路径和用户文件夹目录到D盘
前端·ide·vscode·编辑器·web
一个处女座的程序猿O(∩_∩)O11 分钟前
完成第一个 Vue3.2 项目后,这是我的技术总结
前端·vue.js
mubeibeinv12 分钟前
项目搭建+图片(添加+图片)
java·服务器·前端
逆旅行天涯18 分钟前
【Threejs】从零开始(六)--GUI调试开发3D效果
前端·javascript·3d
m0_7482552639 分钟前
easyExcel导出大数据量EXCEL文件,前端实现进度条或者遮罩层
前端·excel
web147862107231 小时前
C# .Net Web 路由相关配置
前端·c#·.net
m0_748247801 小时前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
飞的肖1 小时前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
青灯文案11 小时前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
m0_748254881 小时前
DataX3.0+DataX-Web部署分布式可视化ETL系统
前端·分布式·etl