nodejs01

nodejs作用

Node.js 是一个免费的、开源的、跨平台的 JavaScript 运行时环境,允许开发人员在浏览器之外编写命令行工具和服务器端脚本.

是javascript的一个运行环境,,,
nodejs stream 是前端工程化的基础
nodejs可以作为中间层,,因为只有前端才知道他需要哪些数据,,中小型项目不需要中间层


koa使用

koa:基于node.js的一个web框架
koa洋葱模型,,,koa的use() : 表示使用中间件,,传入一个函数,每一个函数的参数有一个ctx:上下文环境,,next:下一个中间件,,,,一个中间件中执行下一个中间件,,,===》 洋葱模型,,如果存在异步调用,就会打破这种洋葱模型,,当前线程被阻碍,,,就会执行下面的内容,,,所以 必须使用 await 去等待next()执行

const Koa = require("koa")

const router = require()
// import Koa from "koa"

console.log(Koa)

class Sample{
    x=1
}
// 应用程序对象
var app = new Koa();



function test(){
    console.log("hello")
}


router.get("/classic/latest",(ctx,next)=>{
    ctx.body = {
        key:"classic"
    }
})

app.use(router.routes())

// 默认注册第一个中间件
// app.use(test)
/**
 * @ctx: 上下文
 * @next :  下一个中间件
 */
// app.use(async (ctx, next) => {
//     console.log("wtf")
//     // 执行下一个中间件
//     // 异步,,,
//     // next的结果一定是一个promise
//     let a = await next()
//     console.log(a)
//     console.log(2)
// })
//
// app.use(async (ctx,next)=>{
//
//     // ctx是Requests别名
//     console.log(ctx.path)
//     console.log(ctx.method)
//
//     if (ctx.path === "/aaa" && ctx.method ==='GET'){
//         // koa最终会读取这个body,,将body内容返回
//         ctx.body = "aaa"
//         return "aaa"
//     }
//
// })



app.listen(3000)
koa-router使用
const Router = require("koa-router")
var router = new Router();
// get post put delete
router.get("/classic/latest",(ctx,next)=>{
    console.log(123)
    ctx.body={
        key:"classic"
    }
})
// 使用路由
app.use(router.routes())

所有路由写在一个页面不合适,需要被分类管理,,分到单独的js中,,但是怎么加载这个单独的路由,,
一个项目不是只有一个路由,,可以有很多个路由,,
在这里插入图片描述
在这里插入图片描述
挨个导入,并使用 这些路由,,
,,
但是路由也会有很多,怎么让他路由自动注册:
使用一个包require-directory, 会读取指定路径下的所有包,,导出的包都去执行visit标识的函数

const requireDirectory = require("require-directory")
/**
 *  每加载一个module都去调用一下这个函数 whenLoadModule,, 并且将module传到whenLoadModule参数中
 * @type {{}}
 */
const modules = requireDirectory(module,"./app/api",{visit:whenLoadModule})

// o
function whenLoadModule(obj){
    // 约定路由模块只导出router。。。   如果带{}  ,, 会导出多个,obj就是导出的多个
    if (obj instanceof Router){

        app.use(obj.routes())
    }
}

这个注册路由 写在了入口函数app.js中,需要抽离出去
init.js

const requireDirectory = require("require-directory")
const Router = require("koa-router");
 class InitManager{

    static  initCore(app){
        // 入口方法
        InitManager.app = app
        InitManager.initLoadRouters()
    }
    static initLoadRouters(){
        const apiDirectory = `${process.cwd()}/app/api`
        const modules = requireDirectory(module,apiDirectory,{visit:whenLoadModule})

// o
        function whenLoadModule(obj){
            // 约定路由模块只导出router。。。   如果带{}  ,, 会导出多个,obj就是导出的多个
            if (obj instanceof Router){

                InitManager.app.use(obj.routes())
            }
        }
    }
}

module.exports = InitManager

在app.js中调用:

const InitManager = require("./core/init")
InitManager.initCore(app)
用到的api
  • process.cwd() : 当前项目的根路径

CommonJS模块:
导入:

const aa = require("xxx")

导出:

module.exports="waterkid"
module.exports.eat = function (){
    console.log("eating")
}
module.exports={
    "username":"cc"
}

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

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

相关文章

南金研小巧的CAN总线记录仪在冬测中的使用

南金研小巧的CAN总线记录仪在冬测中的使用: 在这里插入图片描述 1.确定需求:在开始使用前,需要明确冬测的具体需求,例如需要记录的CAN总线数据类型、采样率、存储容量等。 2.连接硬件:将小巧的CAN总线记录仪与需要进行…

年终总结——平凡又不平凡的2023

前言 总结不知道该如何写起,也不知该如何建立这一篇文章的大致框架,只知道我的2023大概也就分成两大块罢了。说起2023一整年,只能用平凡而又不平凡来形容,平凡在我依旧没有什么太突出的技术点,专业水平也一直处于龟速…

无痛迁移:图解 Kubernetes 集群升级步骤

本文探究了Kubeadm集群升级工作流程,并以可视化方式展现。着重介绍了控制平面节点和工作节点的升级步骤,涵盖了kubeadm升级、节点清空、kubelet和kubectl升级,以及解除节点封锁的关键步骤。 这个简明扼要的指南可帮助用户理解和执行Kubernete…

计算机Java项目|基于Springboot实现患者管理系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 文末获取源码 项目编号:KS-032…

new FormData 同时发送表单 json 以及文件二进制流

需要新增时同时发送表单 json 以及对应的文件即可使用以下方法传参 let formDataParams new FormData(); 首先通过 new FormData() 创建你需要最后发送的表单 接着将你的对象 json 存储,注意使用 new Blob 创建大表单转换成 json 格式。以…

交换机04_远程连接

通过远程管理方式连接交换机 1、telnet简介 telnet 是应用层协议 基于传输层TCP协议的,默认端口:23 采用的是明文密码方式 不是很安全,一般用于内网管理。 2、ssh协议简介 ssh 是应用层的协议,基于传输层的TCP协议&#x…

新手小白必了解c语言之字符串函数

本篇介绍字符串库函数为 目录 引言 一:字符串函数的头文件为#include 二:求字符串长度函数 (strlen) 1.函数介绍 2.函数使用举例 3.模拟实现 三:字符串复制函数(strcpy) 1.函数介绍 2.函数使用举例 3.模…

lombok注解 @Data使用在继承类上时出现警告解决

一、警告问题 1、Data注解 Data 包含了 ToString、EqualsAndHashCode、Getter / Setter和RequiredArgsConstructor的功能。 当使用 Data注解时,则有了 EqualsAndHashCode注解(即EqualsAndHashCode(callSuperfalse)),那么就会在此…

uni-app 经验分享,从入门到离职(实战篇)——模拟从后台获取图片路径数据后授权相册以及保存图片到本地(手机相册)

文章目录 📋前言⏬关于专栏 🎯需求描述🎯前置知识点🧩uni.showLoading()🧩uni.authorize()🧩uni.downloadFile()🧩uni.saveImageToPhotosAlbum() 🎯演示代码🧩关于图片接…

YOLOv5改进 | 2023 | SCConv空间和通道重构卷积(精细化检测,又轻量又提点)

一、本文介绍 本文给大家带来的改进内容是SCConv,即空间和通道重构卷积,是一种发布于2023.9月份的一个新的改进机制。它的核心创新在于能够同时处理图像的空间(形状、结构)和通道(色彩、深度)信息,这样的处理方式使得SCConv在分析图像时更加精细和高效。这种技术不仅适…

DP专题9 理解01背包问题

本题链接:晴问算法 题目: 样例: 输入 5 8 3 5 1 2 2 4 5 2 1 3 输出 10 思路: 对于 01 背包问题,我们需要明确 DP 数组的含义,这里 经典的 01 背包问题可以用 二维DP进行表示。 即: dp[ i ]…

【C++】类和对象详解(类的使用,this指针)

文章目录 前言面向过程和面向对象的初步认识类的引入类的定义类的访问限定符和封装性访问限定符封装性 类的作用域类的实例化类对象模型如何计算类对象的大小类对象的存储方式猜测结构体内存对齐规则 this指针this指针的引出this指针的特性 总结 前言 提示:这里可以…

红帽Redhat安装教程及安装出错(Liunx)

一、红帽5安装 1.打开vmware,新建虚拟机。或者文件→新建虚拟机 2.自定义,下一步 3.下一步 4.稍后安装操作系统,下一步 5.linux 红帽5 64位,下一步 6.给虚拟机取名字,选择安装路径。下一步 7.下一步(可以根据自己的电脑配置稍微增加数量) 8.4GB 下一步 9.仅主机(根据需…

运维工程师——敢问路在何方!

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏&#xff1a…

[NISACTF 2022]popchains

[NISACTF 2022]popchains wp 题目代码&#xff1a; Happy New Year~ MAKE A WISH <?phpecho Happy New Year~ MAKE A WISH<br>;if(isset($_GET[wish])){unserialize($_GET[wish]); } else{$anew Road_is_Long;highlight_file(__FILE__); } /**********************…

RTT打印时间戳

官方的RTT VIEWER没有打印接收时间戳的功能&#xff0c;经过查找后发现可以有以下三种打印时间戳的方法。 第三方的RTT上位机ExtraPutty自己打印 第三方的RTT上位机 码云上有一个RTT_T2的仓库&#xff0c;基于python qt包写的画面&#xff0c;通过pylink来jlink通信。 优点…

CorelDRAW 2023 中文破解、终身永久版 (附序列号)

CorelDRAW2023是一款非常专业的电脑图像设计工具。该产品推出了全新的2023版本&#xff0c;在功能和体验上更进一步&#xff0c;最新的填充和透明设备功能可以完全控制任何类型的纹理&#xff0c;适用于网络摄影、印刷项目、艺术、排版等&#xff0c;让你可以更好的进行图像设计…

安全加密基础—基本概念、keytool、openssl

安全加密基础—基本概念、keytool、openssl 目录 前言 一、概念 明文通信 无密钥密文通信 对称加密 非对称加密 数字签名 消息摘要(MD5) CA数字证书(解决公钥分发的问题) HTTPS 相关文件扩展名 常用后缀名 普通的pem文件内容 二、keytool 2.1常用的命令如下 2…

网络优化篇(一)---------TCP重传性能优化

本文通过一个TCP重传优化的实际问题,详细讲解问题的分析、定位、优化过程。 通过本文你将学到: 如何通过linux命令和/proc文件系统分析TCP性能数据如何通过linux命令和netlink api分析某个具体的TCP连接的性能数据如何通过bcc工具分析TCP性能数据如何通过调整系统参数优化TCP重…

第1章 线性回归

一、基本概念 1、线性模型 2、线性模型可以看成&#xff1a;单层的神经网络 输入维度&#xff1a;d 输出维度&#xff1a;1 每个箭头代表权重 一个输入层&#xff0c;一个输出层 单层神经网络&#xff1a;带权重的层为1&#xff08;将权重和输入层放在一起&#xff09; 3、…