Koa学习1:初始化项目

前言

作为前端开发者,最适合我们的后端就是node了,node的框架挺多的。选择Koa是因为国内用的挺多的、关于这方面的教程也很多、而且比较适合小项目。

学习教程是:【杰哥课堂】-项目实战-Node+Koa2从零搭建通用API服务

写这些文章,更多的是当作自己的笔记,方便以后查看。

项目初始化

初始化项目

npm init -y

进入到文件夹下创建.gitignoreREADME.md文件

安装koa

npm i koa

创建入口文件
在项目根目录下创建main.js

// 导入Koa
const Koa = require("koa");
// 实例化
const app = new Koa();

// 中间件
app.use(async (ctx, next) => {
    const start = Date.now();
    await next();
    ctx.body = 'hellow koa';
  });

// 监听端口
app.listen(3000, () => {
        console.log(`app listening at http://localhost:3000`)
});

设置启动命令
package.json里设置启动命令

"scripts": {
  "dev":"node main.js" // 入口文件的地址要写对
},

在这里插入图片描述

优化

热重启

保证代码修改后页面能够及时刷新。这里需要安装nodemon,安装到开发环境依赖里

安装

npm i nodemon -D

修改启动命令

  "scripts": {
    "dev": "nodemon main.js"
  },

设置配置文件

dotenv

dotenv是一个npm工具,它可以帮助我们在Node.js应用程序中加载环境变量。在开发过程中,我们经常需要使用敏感信息,例如数据库密码、API密钥等,这些信息不能直接暴露在代码中。dotenv可以让我们将这些敏感信息存储在一个名为.env的文件中,并在应用程序中使用process.env对象来访问这些变量。这样可以保护我们的敏感信息,同时也方便了我们在不同的环境中部署应用程序。

安装

npm i dotenv

创建配置文件
在项目根目录下创建.env文件,编写.env文件必须遵守以下要求

  1. 变量名必须是大写字母,多个单词之间用下划线连接,例如:DB_HOST。

  2. 变量名和值之间使用等号(=)连接,例如:DB_HOST=localhost。

  3. 变量值可以是字符串、数字、布尔值等任何类型

  4. 如果变量值中包含空格或特殊字符,需要使用引号或双引号括起来,例如:DB_PASSWORD=“my password”。

  5. 如果需要在变量值中使用换行符或其他特殊字符,可以使用转义字符,例如:DB_PASSWORD=“my\npassword”。

  6. 如果需要在变量值中使用其他环境变量,可以使用 语法,例如: D B P A S S W O R D = " {}语法,例如:DB_PASSWORD=" 语法,例如:DBPASSWORD="{DB_USER}_password"。

  7. 如果需要注释.env文件中的某一行,可以在行首添加#符号,例如:# This is a comment。

  8. .env文件中的变量可以在应用程序中通过process.env变量访问,例如:const dbHost = process.env.DB_HOST。

# 监听的端口
APP_PORT = 3000

配置文件
src目录下创建一个config目录,用来保存一些配置
在这里插入图片描述

const dotenv = require('dotenv')
// 从.env文件中加载环境变量到Node.js的process.env对象中
dotenv.config()
// dotenv默认加载.env文件,如果加载其他文件,比如.env.prod可以使用dotenv.config({ path: '.env.prod' })

//console.log(process.env.APP_PORT)

// 导出环境变量
module.exports = process.env

main.js里加载该文件

// 导入Koa
const Koa = require('koa');

// 导入环节变量
const { APP_PORT } = require('./src/config/config.default');
// 实例化
const app = new Koa();

// 中间件
app.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  ctx.body = 'hellow koa1';
});

// 监听端口
app.listen(APP_PORT, () => {
  console.log(`app listening at http://localhost${APP_PORT}`);
});

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

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

相关文章

javascript基础九:说说Javascript中的继承?如何实现继承?

一、是什么 继承(inheritance)是面向对象软件技术当中的一个概念 如果一个类别B“继承自”另一个类别A,就把这个B称为“A的子类”,而把A称为“B的父类别”也可以称“A是B的超类” 继承的优点 继承可以使得子类具有父类别的各种属性…

Java 版 spring cloud 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…

【企业化架构部署】Apache网页优化

文章目录 一、Apache网页优化概述1.优化内容2.网页压缩2.1gzip概述2.2作用2.3Apache的压缩模块概述mod_gzip模块与mod_deflate模块 3.配置网页压缩功能3.1启用网页压缩功能步骤3.2具体操作步骤 4.配置网页缓存功能4.1启用网页压缩功能步骤4.2具体操作步骤 二、Apache安全优化1.…

设计模式之~工厂系列(简单工厂、工厂方法、抽象工厂)

目录 简单工厂模式 工厂方法模式 简单工厂 VS 工厂方法 抽象工厂模式: 拓展: 利用简单工厂模式优化抽象工厂 利用反射抽象工厂 进行优化 反射配置文件抽象工厂进行优化 简单工厂模式 优点:简单工厂模式的最大优点在于工厂类包含…

计算机专业主要学习什么

2020计算机专业主要学习什么 1计算机专业都学习哪些方面的知识 1、可视化编程 掌握编程方法和可视化技术,熟悉一个可视化平台及其软件开发技术。能够获取Delphi编程人员系列,Java Basic或VB开发专家认证。 就业方向:企业,政府&…

vue前端分页功能怎么实现

Vue前端分页功能可以通过以下几个步骤实现: 1. 安装分页组件库(如vue-pagination-2): bash npm install vue-pagination-2 2. 在Vue项目中引入并注册分页组件: javascript import Vue from vue; import Pagination fr…

传地址给组件并让该组件用到地址在背景图片中的方法

问题 这是我在开发中遇到的问题。在网站的分页面中,背景图片的格式几乎一模一样。只是上面的文字和图片不一样而已。 所以我希望写一个组件,然后页面只需要传入背景图片地址和标题就可以显示出相关内容。 于是我动手写了,大致思路是一个盒…

判断点在多边形内算法的C++实现

本篇博客介绍了使用射线法判断点在多边形内部还是外部的算法,并通过C做了具体实现 1. 算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是…

AMEYA360:纳芯微推出车规级耐高压、三线霍尔开关及锁存器NSM101x系列

纳芯微推出全新三线制车规霍尔效应开关/锁存器NSM101x系列,为数字位置检测提供高精度的解决方案,可被广泛应用于汽车执行器等的位置检测。 NSM101x产品系列包含了3个产品型号,即NSM1011(单极霍尔开关)、NSM1012(全极霍尔开关)、NSM1013(霍尔锁…

【Unity】Playable使用细则

【Unity】Playable使用细则 本文基于Unity 2021.3 API。 本文介绍官方文档中没提及的Playable使用限制、注意事项、Bug及规避方案,不是Playable的入门教程! 如果你还不熟悉Playable的基础用法,请先学习以下官方文档和示例: Playa…

基于STM32的定时器--定时中断(HAL库)

基于STM32的定时器--定时中断(HAL库) 介绍引言定时器介绍 实例项目介绍准备设计流程 介绍 引言 本文旨在介绍如何使用STM32CubeMX配置KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。 定时器介绍 定时器是STM32微…

chatgpt赋能python:Python升降序排列数字

Python升降序排列数字 在Python编程中,排序是一个非常常见并且重要的操作。Python提供了多种排序算法以满足不同的需求。 排序算法 Python中内置的排序算法有两种:Timsort和Quicksort。其中Timsort是一种混合排序算法,结合了插入排序和归并…

Linux系统中源码安装1.8.x版本Arduino IDE

本文内容参考: Ubuntu22.04安装Arduino IDE及Arduino UNO(使用CH341驱动)调试方法__KILLMILEDC_的博客-CSDN博客 在Linux上下载arduino_不说话的白帽子的博客-CSDN博客 https://guoqing.blog.csdn.net/article/details/88913063?spm1001.…

Linux NGINX服务 ReWrite^location

ReWrite^location 从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。 rewrite 对访问…

c++ new 源码学习一下

之前有一篇文章介绍了 new 的一些用法 c new 在指定内存上创建对象&#xff0c;今天结合源码来学习一下 new 更详细的用法。相关的源码&#xff1a;gcc git 1&#xff0c;void* operator new (std::size_t size); 我们可以在头文件<new>里看到它的原型&#xff1a; _G…

C++11 -- lambda表达式

文章目录 lamaba表达式的引入lambda表达式语法lamabda达式各部分说明捕获列表说明 lamaba表达式底层原理探索 lamaba表达式的引入 在C11之前,如果我们想对自定义类型Goods排序,可以根据姓名,价格,学号按照从大到小或者从小到大的方式排序,可是,这样我们要写额外写6个相关的仿函…

Quest 3初体验,或是苹果MR最大竞争对手

随着苹果MR临近&#xff0c;我们从彭博Mark Gurman了解到更多消息。昨日&#xff0c;Mark Gurman发布了Quest 3上手体验文章&#xff0c;并认为Quest 3可能是苹果MR头显最大的竞争对手。 1&#xff0c;Meta是XR头显领导者 尽管WWDC 23苹果MR将会成为最大的主角&#xff0c;但…

node.js与内置模块

一、目标 能够知道什么是Node.js能够知道Node.js可以做什么能够说出Node.js中的JavaScript的组成部分能够使用fs模块读写操作文件能够使用path模块处理路径能够使用http模块写一个基本的web服务器 二、目录 初始Node.jsfs文件系统模块path路径模块http模块 1.初始Node.js …

macos wireshark 抓取https包

1、启动浏览器 1.1 创建空文件 $ touch /Users/zhujl/Downloads/https/mysslkey.log 2、设置wireshark tls属性&#xff0c;指定tls密钥存储文件 2.1 进入Wireshark Preferfences > Protocols > TLS 属性配置 2.2 勾选上Reassemable TLS records spanning multiple …

设计模式B站学习(一)(java)

这里写目录标题 一、设计模式概述1.1 软件设计模式的产生背景1.2 软件设计模式的概念1.3 学习设计模式的必要性1.4 设计模式分类 二、UML图2.1 类图概述2.2 类图的作用2.3 类图表示法2.3.1 类图表示方法2.3.2 类与类之间关系的表示方法2.3.2.1 关联关系2.3.2.2 聚合关系2.3.2.3…