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

news2024/11/28 12:41:26

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,编写代码:

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

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

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

// 导入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
在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx的基础讲解之重写conf文件

一、Nginx 1、什么是nginx? Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 2、用于什么场景 Nginx适用于各种规模的网站和应用程序,特别是需要高并发处理和负载均衡的场…

Python | Leetcode Python题解之第452题用最少数量的箭引爆气球

题目: 题解: class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:if not points:return 0points.sort(keylambda balloon: balloon[1])pos points[0][1]ans 1for balloon in points:if balloon[0] > pos:pos balloo…

【EO-1(Earth Observing-1)卫星】

EO-1(Earth Observing-1)卫星是美国国家航空航天局(NASA)新千年计划(New Millennium Program,NMP)地球探测部分中的第一颗对地观测卫星。以下是对EO-1卫星的详细介绍: 一、发射与服…

国外电商系统开发-运维系统单个添加被管理服务器

提前设置好您的远程主机的信息,这样才能自动执行任务。否则,自动执行根本无从谈起。登录方式有SSH密码登录、SSH-Key登录两种方式。 最后点击保存。 上面的刷新图标表示在请求该服务器的状态。如果该服务器状态正常,则会显示如下图标&#xf…

业务封装与映射 -- 编码方式(QPSK、DQPSK、QAM)

信号在光通信系统中传输,需要在信号的发送端对原始电信号进行调制,接收端进行解调,恢复成原始的二进制电信号。光通信系统有三种基本的调制方式:ASK(调幅)/FSK(调频)/PSK&#xff08…

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

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

看门狗电路设计

看门狗电路设计 看门狗是什么应用架构图TPV6823芯片功能硬件时序图为什么要一般是要保持200个毫秒左右的这种低电平的时间看门狗电路实际应用与条件 看门狗是什么 硬件看门狗芯片,Watch DogTimer,可用于受到电气噪音、电源故障、静电放电等影响(造成软件…

【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录解决方案

【AI学习笔记】基于UnityDeepSeek开发的一些BUG记录&解决方案 背景前摇:(省流可不看) Unity是大学学的,AI是研究生学的,DeepSeek是第一份实习偷师的,三合一的梦是最近开始做的,BUG是今天遇…

VRRP协议个人理解+报文示例+典型配置-RFC2338/RFC3768/RFC5798/RFC9568

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。 因此本文将在VRRP协议报文的基础上进行介绍。 VRRP协议发展 关于VRRPv2基本原理,可重点参考2004年发布的RFC3768-Virtual Ro…

【python实操】python小程序之函数的方法和赋值的区别

引言 python小程序之函数的方法和赋值 文章目录 引言一、函数的方法和赋值1.1 题目1.2 代码1.2.1 append方法1.2.2 赋值 1.3 代码解释1.3.1 append方法1.3.2 赋值 二、思考2.1 append方法和赋值的区别2.1.1 append方法2.1.2 赋值操作2.1.3 总结 一、函数的方法和赋值 1.1 题目…

通过freepbx搭建小型电话系统的过程

领导说公司的客服电话需要实现语音导航和非工作时间自动接听播放语音提示的功能。任务自然落到了伟大的程序员的头上,本着为公司节约成本原则遂百度了一番,找到了asterisk 和freeswitch两个比较流行的电话系统。经过对比和考虑公司的情况选择了asterisk系…

STM32 通用定时器

一、概述 STM32内部集成了多个定时/计数器,根据型号不同,STM32系列芯片最多包含8个定时/计数器。其中,TIM6、TIM7为基本定时器,TIM2~TIM5为通用定时器,TIM1、TIM8为高级控制定时器。 1.定时器的类型 基本定时器通用定…

C/C++ 中的未定义行为(Undefined Behavior, UB)

0. 简介 在 C/C 编程中,理解未定义行为(UB)及其相关概念至关重要。本文将对未定义行为进行详细解析,并通过实例展示其影响与处理方法。 1. 概念辨析 在 C/C 中,未定义行为容易与以下两个概念混淆: 1.1 …

【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…

【pytorch】张量求导

笔者看到了这篇文章,可以很好的解释张量的求导问题: 看到了上面这张图,可以说很好的表示了前向和反向的过程了。 补充几个细节 之前看李沐的d2l,一直不懂为什么矩阵计算时的一些奇奇怪怪的规定,比如为什么一个行向量…

github项目——gpt-pilot自动创建应用

今天扯一扯在github上看到的一个项目gpt-pilot,声称“首个AI程序员”。本来打算玩一下,结果需要配置大语言模型的API,并且只支持OpenAI和claude(Qwen呢)。有没有玩过的老哥说一下好不好用!!(对了…

【Postman】接口测试工具使用

干就完啦 Postman发送get请求案例1: Postman发送post请求案例2 Postman发送其他请求 学习目标:能够使用Postman发送get/post/put/delete请求并获取响应结果 Postman发送get请求 首先postman是一款接口调试工具,支持win,mac以及l…

Python | Leetcode Python题解之第456题132模式

题目: 题解: class Solution:def find132pattern(self, nums: List[int]) -> bool:candidate_i, candidate_j [-nums[0]], [-nums[0]]for v in nums[1:]:idx_i bisect.bisect_right(candidate_i, -v)idx_j bisect.bisect_left(candidate_j, -v)if…

Pandas -----------------------基础知识(六)

目录 数据类型 查看类型 类型转换 无法转换的值返回NaN 无法转换的值返回原值 datetime类型 datetime类型数据列作为df索引 Python中的timedelta类型 Pandas中的timedelta类型 pd.to_timedelta函数转换timedelta类型 timedelta类型数据作为df索引 分组groupby 分箱…

开发环境简单介绍

目录 开发环境keil的安装和使用 keil的介绍 keil的安装 keil的简单使用 STC-ISP的安装 STC-ISP简单介绍 开发环境测试 总结 开发环境keil的安装和使用 keil的介绍 Keil uVision5是一个集成开发环境(IDE),用于对嵌入式系统中的微控制器…