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

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

相关推荐
Zestia14 分钟前
页面点击跳转源代码?——element-jumper插件实现
前端·javascript
前端小白199514 分钟前
面试取经:工程化篇-webpack性能优化之优化loader性能
前端·面试·前端工程化
PineappleCoder14 分钟前
大小写 + 标点全搞定!JS 如何精准统计单词频率?
前端·javascript·算法
zhangbao90s16 分钟前
Web组件:使用Shadow DOM
前端
hhy前端之旅16 分钟前
语义版本控制:掌握版本管理的艺术
前端
coding随想16 分钟前
深入浅出DOM操作的隐藏利器:Range(范围)对象——掌控文档的“手术刀”
前端
前端小白199516 分钟前
面试取经:工程化篇-webpack性能优化之减少模块解析
前端·面试·前端工程化
一枚前端小能手17 分钟前
🏗️ 项目越来越大维护不动了,微前端架构了解一下
前端
文艺理科生26 分钟前
Nuxt.js入门指南-Vue生态下的高效渲染技术
前端·vue.js·nuxt.js
夏小花花30 分钟前
vue3 ref和reactive的区别和使用场景
前端·javascript·vue.js·typescript