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

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

相关推荐
热爱编程的小曾23 分钟前
sqli-labs靶场 less 8
前端·数据库·less
gongzemin34 分钟前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js
Apifox1 小时前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
树上有只程序猿1 小时前
后端思维之高并发处理方案
前端
庸俗今天不摸鱼2 小时前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下2 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox2 小时前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞2 小时前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行2 小时前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_593758102 小时前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox