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

前言

在正式开始之前,需要先知道用到的东西:

  • koa:Koa 是一个基于 Node.js 的 Web 应用框架,非常适合开发API服务,可以与前端框架(如 Vue.js、React.js)结合使用,实现前后端分离的开发模式。
  • koa-router:是一个用于在 Koa 框架中实现路由功能的模块。
  • koa-body:是一个用于 Koa 框架的中间件,它主要用于处理 HTTP 请求中的请求体。

文档:

Koa中文文档
koa-router NPM
koa-router API
koa-body NPM

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HTTP(3)】(状态码,https)

【认识状态码】 状态码最重要的目的,就是反馈给浏览器:这次请求是否成功,若失败,则出现失败原因 常见状态码: 200:OK,表示成功 404:Not Found,浏览器访问的资源在服务器上没有找到 403:Forbidden,访问被…

使用 Light Chaser 进行大屏数据可视化

引言 在当今数据驱动的世界中,数据可视化变得越来越重要。Light Chaser 是一款基于 React 技术栈的大屏数据可视化设计工具,通过简单的拖拽操作,你可以快速生成漂亮、美观的数据可视化大屏和看板。本文将介绍如何使用 Light Chaser 进行数据…

10款好用的开源 HarmonyOS 工具库

大家好,我是 V 哥,今天给大家分享10款好用的 HarmonyOS的工具库,在开发鸿蒙应用时可以用下,好用的工具可以简化代码,让你写出优雅的应用来。废话不多说,马上开整。 1. efTool efTool是一个功能丰富且易用…

【unity进阶知识6】Resources的使用,如何封装一个Resources资源管理器

文章目录 一、Unity资源加载的几种方式1、Inspector窗口拖拽2、Resources3、AssetBundle4、Addressables(可寻址资源系统)5、AssetDatabase 二、准备三、同步加载Resources资源1、Resources.Load同步加载单个资源1.1、基本加载1.2、加载指定类型的资源1.…

漆包线称重系统/自动称重/项目合作

万界星空科技漆包线行业称重系统实现自动称重的方式主要依赖于现代数字电子称重技术、计算机网络技术以及相关的软件系统的集成。以下是对该系统如何实现自动称重的详细解释: 一、硬件基础 称重设备: 系统采用高精度的电子秤作为称重设备,这…

Meta推出Movie Gen 旗下迄今最先进的视频生成AI模型

Meta 今天发布了 MovieGen 系列媒体基础AI模型,该模型可根据文本提示生成带声音的逼真视频。 MovieGen 系列包括两个主要模型: MovieGen Video 和 MovieGen Audio。 MovieGen Video 是一个具有 300 亿个参数的变换器模型,可根据单个文本提示生…

方法重载(Overload)

前言 在前面的学习中,我们学到了重写(Override),这里我们主要进行重载(Overload)的介绍,同时对重写和重载的区别进行分析。 1. 重载(Overload) #方法重载 在同一个类中定义多个同名但参数不同的方法。我们称方法与方法之间构成方法重载 在Java中&…

【linux进程】进程优先级命令行参数环境变量

目录 一,进程切换二,进程优先级1. 什么是优先级2. 权限 vs 优先级3. 为什么要有优先级4. 优先级的查看方式 三,命令行参数1. 什么是命令行参数2. 为什么要有命令行参数3. 是谁做的 四,环境变量1. 基本概念2. 常见环境变量3. 查看环…

针对线上消息积压的排查思路以及解决方案

一、背景 我们在日常工作中,经常会碰到线上告警,消息队列消息积压了,试想如果对消息的消费速率有要求的场景,消息积压一定会或多或少对自己本身的业务场景有影响,这里就针对消息积压的场景,谈谈具体的排查…

15分钟学 Python 第37天 :Python 爬虫入门(三)

Day 37 : Python爬虫入门大纲 章节1:Python爬虫概述 1.1 什么是爬虫? 网页爬虫(Web Crawler)是一种自动访问互联网上网页并提取数据的程序。爬虫的作用包括搜索引擎索引内容、市场调查、数据分析等。 1.2 爬虫的工作原理 发起…

Vue中使用ECharts实现热力图的详细教程

在数据可视化领域,热力图是一种非常直观的表现形式,它通过颜色深浅来展示数据分布情况。在Vue项目中,我们可以使用ECharts这一强大的图表库来实现热力图。下面我将详细介绍如何在Vue中使用ECharts实现热力图。效果如下图: 一、准备…

Python或R时偏移算法实现

🎯要点 计算单变量或多变量时序距离,使用欧几里得、曼哈顿等函数量化不同时序差异。量化生成时序之间接近度相似性矩阵。使用高尔距离和堪培拉距离等相似度测量。实现最小方差匹配算法,绘制步进模式的图形表示。其他语言包算法实现。 &…

vue3 + ts + cesium:绘制、更新圆 ellipse

本文主要实现基础的绘制圆形,并且可以通过拖动圆心更新圆的位置,拖动圆上的边缘点改变圆的半径。 实现效果: (1)单击鼠标左键开始绘制,确定圆的圆心,移动鼠标,改变圆的半径&#xff…

Mac屏蔽系统更新,取出红点标记如果解锁hosts文件

引言:关闭系统更新,首先应该在系统偏好设置---软件更新---去掉自动更新的选项。即使如此,系统仍然进行macOS系统和自带safari等软件的检测更新,并图标右上角红点点标记提醒我们更新,那我们如果彻底屏蔽更新呢&#xff…

解决 Adobe 盗版弹窗

在这个文件夹下删除 Adobe CCXProcess 然后重装。 Adobe Premiere Pro 2024 (v24.6.1) Multilingual :: Варез от m0nkrusa [Warez by m0nkrus] (monkrus.ws) Adobe Photoshop 2024 (v25.12) Multilingual :: Варез от m0nkrusa [Warez by m0nkrus] (monkrus.…

Spring Boot RESTful API开发教程

一、RESTful API简介 RESTful API是一种基于HTTP协议的Web API,其设计原则是简单、可扩展、轻量级、可缓存、可靠、可读性强。RESTful API通常使用HTTP请求方法(GET、POST、PUT、DELETE等)来操作资源,使用HTTP状态码来表示操作结…

JQuery基本介绍和使用方法

文章目录 JQuery基本介绍和使用方法引入依赖 jQuery语法jQuery选择器jQuery事件操作元素获取/设置元素内容获取/设置元素属性获取/返回css属性添加元素删除元素 JQuery基本介绍和使用方法 W3C 标准给我们提供了⼀系列的函数, 让我们可以操作: ⽹⻚内容⽹⻚结构⽹⻚样式 但是…

案例-猜数字游戏

文章目录 效果展示初始画面演示视频 代码区 效果展示 初始画面 演示视频 猜数字游戏 代码区 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…

PostgreSQL Docker Error – 5432: 地址已被占用

PostgreSQL Docker Error – 5432: 地址已被占用 今天在学习【Spring Boot React】价值79.9美元&#xff0c;全栈开发&#xff0c;搭建个人网站、做毕业设计、试试这套课程第17~21节视频的时候&#xff0c;发现运行docker run --name demo-postgres -e POSTGRES_PASSWORDpass…

【C++】类与对象(三)

「前言」 &#x1f308;个人主页&#xff1a; 代码探秘者 &#x1f308;C语言专栏&#xff1a;C语言 &#x1f308;C专栏&#xff1a; C &#x1f308;喜欢的诗句:天行健,君子以自强不息. 目录 一、再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 关键字 二…