Koa2+mongodb项目实战1(项目搭建)

Koa中文文档

Koa 是一个基于 Node.js 的 Web 应用框架,由 Express 原班人马打造。

Koa 并没有捆绑任何中间件,而是提供了一套优雅的方法,帮助开发者快速地编写服务端应用程序。

项目初始化

创建一个文件夹:ko2-mongodb

打开文件夹,初始化项目,生成一个package.json 文件:

shell 复制代码
npm init -y

这个命令会自动创建一个 package.json 文件,该文件是 Node.js 项目的配置文件,包含了项目的名称、版本、依赖项、脚本等重要信息。

通过 -y(或 --yes)参数,命令会自动使用默认值填充 package.json,无需手动回答一系列问题。

如果需要在本地git仓库对项目版本做管理,可以初始化git:

shell 复制代码
git init

在项目根目录下新建一个.gitignore文件,让项目的某些文件不要提交到git仓库:

shell 复制代码
node_modules

项目搭建

安装Koa框架:

shell 复制代码
npm install koa

安装成功,在package.json中会显示依赖信息:

创建src/main.js,编写代码:

typescript 复制代码
// 导入koa, koa是一个类
const Koa = require('koa')

// 创建koa实例对象:app
const app = new Koa()

// 使用 app.use() 方法添加中间件,且只能写一个中间件
// 注意:app.use 只能接收函数作为参数
app.use((ctx, next) => {
  // 中间件逻辑
  ctx.body = 'hello Koa!'
});

// 指定端口号并启动服务器
const port = 3000 // 表示服务器将监听的端口号
app.listen(port, () => {
  console.log('server is running on http://localhost:3000')
})
  • app.use():用于向应用添加中间件

    • 语法: app.use(middleware)
      • middleware 是一个函数,它接收两个参数 ctx(上下文对象)和 next(一个函数,用于调用下一个中间件)。
      • ctx 包含了请求和响应的信息,可以通过它访问请求对象 ctx.request 和响应对象 ctx.response。例如,在中间件中修改 ctx.body 来设置响应内容,或者通过 ctx.params 获取路由参数等。
      • next 函数用于调用下一个中间件。当在一个中间件中调用 next() 时,Koa 会暂停当前中间件的执行,将请求传递给下一个中间件。当后续的中间件都执行完毕后,Koa 会回溯回来继续执行当前中间件中 next() 之后的代码。
    • 如果 app.use 接收到的 middleware 不是函数,执行运行命令后,在终端会报错:
  • app.listen():用于启动服务器并在指定的端口上监听传入的连接。

    • 调用这个方法后,服务器开始在指定的端口上监听传入的 HTTP 请求。当有请求到达时,Koa 会根据注册的中间件依次处理请求,并生成响应返回给客户端。
    • 语法:app.listen(port, [hostname], [backlog], [callback])
      • port:必选参数,服务器要监听的端口号。
      • hostname:可选参数,服务器要监听的主机名。默认是 '0.0.0.0',表示监听所有的网络接口。
      • backlog:可选参数,指定连接队列的最大长度。默认是 511
      • callback:可选参数,服务器启动后要执行的回调函数。如果提供了回调函数,它会在服务器成功启动后被调用。这个回调函数通常用于输出一些启动成功的信息或者执行其他初始化操作。

在终端执行指令,启动服务:

shell 复制代码
node src/main.js

在这个例子中,main.js 文件中使用了 Koa 框架创建了一个服务器,设置一个简单的中间件,并设置了服务器监听的端口为 3000,执行node src/main.js指令后,服务器就会在本地的 3000 端口上运行,当有请求到达时,会返回 'hello Koa!' 作为响应内容。

命令行终端输出:

按住CTRL+单击,可以打开链接http://localhost:3000

node src/main.js用于使用 Node.js 运行位于 src目录下的 main.js文件。

这条指令的作用通常是启动一个基于 Node.js 的应用程序。如果 main.js 文件中包含了服务器的设置、路由定义、中间件的使用等代码,执行这个指令后,就会启动相应的服务,可能是一个 Web 服务器、API 服务或者其他类型的后端服务。

注意

修改main.js后,必须停掉服务,重新执行node src/main.js,刷新页面,页面才会更新!

所以在实际项目中,是不会使用node命令来直接启动的。

现在,项目的目录结构如下图所示:

配置项目自动重启

安装nodemon

shell 复制代码
npm i nodemon -D

安装完毕后,配置package.json:

json 复制代码
"scripts": {
  "dev": "nodemon ./src/main.js",
},

接下来,就可以执行npm run dev启动服务:

执行命令npm run dev,本质上是使用 nodemon 来监控文件变化并自动重启服务器。

  • [nodemon] 3.1.7,表示正在使用的 nodemon 版本是 3.1.7
  • [nodemon] to restart at any time, enter 'rs',表示可以在任何时候输入 rs 来手动重启 nodemon
  • nodemon 正在监控的路径和文件扩展名:[nodemon] watching path(s): *.*[nodemon] watching extensions: js,mjs,cjs,json,表示 nodemon 正在监控所有路径下的 .js.mjs.cjs.json 文件。
  • nodemon 启动服务器的命令:[nodemon] starting 'node./src/main.js',表示 nodemon 正在启动 node 进程来执行 ./src/main.js 文件。

服务器成功启动并输出了 server is running on http://localhost:3000,表示服务器正在监听本地的 3000 端口。

读取配置文件

dotenv:一个用于读取 Node 环境变量的工具库。
dotenv 是一个 npm 包,用于加载 .env 文件中定义的环境变量赋值给到 process.env 中。
process.env 是 Node.js 程序在运行时能访问到的一个全部变量,存储环境变量信息。

dotenv 中文网
dotenv

安装dotenv

shell 复制代码
npm install dotenv -D

在项目的根目录下创建一个 .env 文件:

shell 复制代码
APP_PORT=8080

创建config/config.env.js文件:

javascript 复制代码
// 引入dotenv,注意:dotenv 是一个对象
const dotenv = require('dotenv')
dotenv.config()

// 将当前进程的环境变量对象 process.env 导出
// process: 当前执行的node的进程
// env: 环境变量
module.exports = process.env

const dotenv = require('dotenv'):这行代码引入了 dotenv 模块。dotenv 是一个用于在 Node.js 应用中加载环境变量的模块。
dotenv.config():调用 dotenv.config() 方法来加载环境变量配置文件。

  • 通常,这个方法会查找项目根目录下的 .env 文件,并将其中定义的环境变量加载到前进程的 process.env 对象中。
  • 环境变量可以在应用中通过 process.env.VARIABLE_NAME 的方式来访问。

module.exports = process.env:这里将当前进程的环境变量对象 process.env 导出。这样,其他模块在引入这个模块时,就可以直接访问当前进程的环境变量。

改写main.js

typescript 复制代码
// 导入koa, koa是一个类
const Koa = require('koa')

const { APP_PORT } = require('./config/config.env')

// 创建koa实例对象:app
const app = new Koa()

// 使用 app.use() 方法添加中间件,且只能写一个中间件
app.use((ctx, next) => {
  console.log(`Request received: ${ctx.request.method} ${ctx.request.url}`);
  // 中间件逻辑
  ctx.body = 'hello Koa!'
});

// 指定端口号并启动服务器
app.listen(APP_PORT, () => {
  console.log(`server is running on http://localhost:${APP_PORT}`)
})

执行npm run dev启动服务:

按住CTRL+单击,打开链接http://localhost:8080

项目的目录结构如下图所示:

相关推荐
工业甲酰苯胺9 分钟前
分布式系统架构:服务容错
数据库·架构
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain1 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship1 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站2 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶2 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
梦想平凡3 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO3 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong4 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起4 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化