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

news/2024/10/5 8:47:39 标签: mongodb, 数据库, koa

Koa中文文档

Koa 是一个基于 Node.js 的 Web 应用框架,由 Express 原班人马打造。
Koa 并没有捆绑任何中间件,而是提供了一套优雅的方法,帮助开发者快速地编写服务端应用程序。

项目初始化

创建一个文件夹:ko2-mongodb

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

npm init -y

这个命令会自动创建一个 package.json 文件,该文件是 Node.js 项目的配置文件,包含了项目的名称、版本、依赖项、脚本等重要信息。
通过 -y(或 --yes)参数,命令会自动使用默认值填充 package.json,无需手动回答一系列问题。

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

git init

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

node_modules

项目搭建

安装Koa框架:

npm install koa

安装成功,在package.json中会显示依赖信息:
在这里插入图片描述

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

// 导入koakoa是一个类
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:可选参数,服务器启动后要执行的回调函数。如果提供了回调函数,它会在服务器成功启动后被调用。这个回调函数通常用于输出一些启动成功的信息或者执行其他初始化操作。

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

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

npm i nodemon -D

安装完毕后,配置package.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

npm install dotenv -D

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

APP_PORT=8080

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

// 引入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

// 导入koakoa是一个类
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
在这里插入图片描述

项目的目录结构如下图所示:
在这里插入图片描述


http://www.niftyadmin.cn/n/5690832.html

相关文章

【Spring】Spring MVC的项目准备和连接建立

文章目录 1. 什么是 Spring Web MVC1.1 MVC 定义1.2 什么是 Spring MVC 2. 学习 Spring MVC2.1 项目准备2.2 建立连接 1. 什么是 Spring Web MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从已开是就包含在 Spring 框架中。它的正式名称“Spring We…

[C/C++开发]链接动态库在不同操作系统上的行为

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 想必很多人已经了解了动态库与静态库,在实际开发中也经常使用. 但是,有必要了解在windows和Linux上开发c程序生成和链接动态库的不同行为,因为经常混淆或者自以为找到了动态库,这里简单学习并澄清一下.其中许多内容来…

【AIGC】VoiceControl for ChatGPT指南:轻松开启ChatGPT语音对话模式

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯安装VoiceControl for ChatGPT插件💯如何使用VoiceControl for ChatGPT进行语音输入VoiceControl for ChatGPT快捷键注意点 💯VoiceControl for C…

Studying-多线程学习Part2 - 互斥量死锁、lock_guard 与 unique_lock、call_once与其使用场景

来源:多线程学习 互斥量死锁 假设有两个线程 T1 和 T2,它们需要对两个互斥量 mtx1 和 mtx2 进行访问,而且需要按照以下顺序获取互斥量的所有权: T1 先获取 mtx1 的所有权,再获取 mtx2 的所有权。T2 先获取 mtx2 的所…

银河麒麟服务器镜像完整性验证:MD5校验

银河麒麟服务器镜像完整性验证:MD5校验 步骤一:获取标准MD5值步骤二:计算MD5值步骤三:对比MD5值 💖The Begin💖点点关注,收藏不迷路💖 在下载或传输银河麒麟服务器镜像时&#xff0c…

cherry-markdown开源markdown组件详细使用教程

文章目录 前言开发定位目标调研技术方案前提工作量安排数据库表设计实现步骤1、引入依赖2、实现cherry-markdown的vue组件(修改上传接口路径)3、支持draw.io组件4、支持展示悬浮目录toc前端使用:编辑状态使用cherry-markdown的vue组件前端使用…

Spark SQL中怎么注册python以及使用python注册的UDF中数据流是怎么流转的

背景 本文基于Spark 3.5.1 无论是从 spark的官网Arrow Python UDFs,还是databricks的一些python udf,好像都没有说到在Spark SQL中怎么直接调用 python定义的UDF,但是其实在使用上,Spark SQL是可以直接使用 python定义的UDF的, 分…

【案例】平面云

教程案例视频:Unity Shader Graph - 云教程 开发平台:Unity 2022 开发工具:Unity ShaderGraph   一、效果展示 二、ShaderGraph 路线图 三、案例分析 核心思路:使用 Noise(噪声)模拟云层状态   3.1 说明…