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 = appInitManager.initLoadRouters()}static initLoadRouters(){const apiDirectory = `${process.cwd()}/app/api`const modules = requireDirectory(module,apiDirectory,{visit:whenLoadModule})// ofunction 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"
}

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

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

相关文章

SpringMVC-@RequestMapping注解

0. 多个方法对应同一个请求 RequestMapping("/")public String toIndex(){return "index";}RequestMapping("/")public String toIndex2(){return "index";}这种情况是不允许的,会报错。 1. 注解的功能 RequestMapping注…

《程序员的自我修养--链接,装载与库》

第一章:温故而知新 过度优化的问题: 我们知道volatile关键字可以阻止过度优化,因为它可以完成两件事: 阻止编译器为了提高速度将一个变量缓存到寄存器而不写回阻止编译器调整操作volatile变量的指令顺序 然而,在优…

如何使用csdn中的c知道进行学习?

1.c知道 猜测是通过chatgpt训练链接到CSDN内部的文章内容等,进行生成的一款应用。 2.如何使用呢 打比方说,我想学习下多目标跟踪中的ukf,那么就可以输入这个关键字。 那既然是学习,就要进一步深究,有三种方式&#…

uniapp向上拉加载,下拉刷新

目录 大佬1大佬2 大佬1 大佬地址:https://blog.csdn.net/wendy_qx/article/details/135077822 大佬2 大佬2:https://blog.csdn.net/chen__hui/article/details/122497140

<软考高项备考>《论文专题 - 51 进度管理(2) 》

3 过程2-定义活动 3.1 问题 4W1H过程做什么识别和记录为完成项目可交付成果而须采取的具体行动的过程作用:将工作包分解为进度活动,作为对项目工作进行进度估算、规划、执行、监督和控制的基础为什么做对活动才能更详细更准确的分配资源、时间、成本谁…

C#,数值计算,求平方根之巴比伦算法(Babylonian algorithm)的源代码

平方根的巴比伦算法。 1 巴比伦算法介绍一 巴比伦算法可能算是最早的用于计算$sqrt{S}$的算法之一,因为其可以用牛顿法导出,因此在很多地方也被成为牛顿法。其核心思想在于为了计算x的平方根,可以从某个任意的猜测值g开始计算。在真实的运算…

屏幕截图--Snagit

Snagit是一款优秀的屏幕、文本和视频捕获、编辑与转换软件。它不仅可以捕获静止的图像,还能获得动态的图像和声音。软件界面干净清爽,功能板块一目了然,为用户提供专业的屏幕录制方案。可以根据自己的需求调整录制视频的分辨率、帧数、输出格…

探索Flutter中常用的系统组件

Flutter 是一款强大的开源移动应用框架,其丰富的系统组件使得开发者可以轻松构建漂亮且高性能的移动应用。在本文中,我们将深入探讨一些常用的 Flutter 系统组件,帮助开发者更好地理解和应用它们。 1. Scaffold(脚手架&#xff0…

Linux命令入门及ls命令

由于大家第一次接触到Linux命令,故此篇会详细讲述什么是命令,什么又是命令行?Linux命令的基础结构,什么是工作目录,什么又是HOME目录?并且带大家熟悉ls命令的基础使用。 1.命令和命令行 命令行&#xff1a…

使用spring cloud gateway作为服务网关

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。 gateway需要注册到nacos中去,需要引入以下的依…

【PgSQL】聚合函数string_agg

在工作中,遇到了这样的需求,需要根据某一个字段A分组查询,统计数量,同时还要查询另一个字段B,但是呢这个字段B在分组后的记录中存在不同的值。最开始不知道有聚合函数可以实现这一功能,在代码中进行了处理。…

[嵌入式C][入门篇] 快速掌握基础3 (运算符)

开发环境: 网页版:跳转本地开发(Vscode):跳转 文章目录 一、 简介二、算术运算符(1)示例代码:(2)和--的先后顺序(直接看效果) 三、逻辑运算符(1)示例代码 四…

网络对讲终端 网络音频终端 网络广播终端SV-7011V使用说明

高速路sip广播对讲求助 隧道sip对讲调度SIP-7011 网络广播终端SV-7011 壁挂式对讲终端网络监听终端SIP广播终端 sip语音对讲终端SIP-7011 SV-7011网络对讲终端网络对讲、网络厂播、监听 SV-7101网络解码终端提供一路线路输出接功放或有源音箱。 SV-7102网络解码广播终端两…

HNU-数据库系统-讨论课2

第二次小班讨论课安排如下: 主题: 数据库系统设计与应用开发。 目的:让学生通过练习和讨论充分掌握数据库系统的设计与应用开发。 内容: 设计和实现一个数据库及应用系统。设计内容包括系统分析、系统设计、 数据库设计(需求分析、概念结构设计、逻辑…

Ranger UserSync

作用 同步User到RangerDb 架构 解析 启动一个while(True) 进程定时同步,程序入口 source sink 掉接口获取Ranger User 并且Cache 计算delta 同步

JavaScript基础(24)_dom查询练习(一)

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><link rel"stylesheet" href"../browser_default_style/reset.css"><title>dom查询练习一</title><style>.text {widt…

Anaconda 环境中安装OpenCV (cv2)

1、使用Anaconda 的对应环境&#xff0c;查看环境中的Python版本号 (1)使用Anaconda 查看存在的环境&#xff1a;conda info --env (2)激活环境&#xff1a;conda activate XXX 2、根据版本号&#xff0c;下载对应的 python-opencv 包 &#xff08;1&#xff09;选择国内源的…

【算法Hot100系列】括号生成

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

Android RecyleView 使用 Gilde 加载图片引发的卡顿问题

Glide 是一个用于 Android 的图片加载和缓存库。它可以帮助开发者快速、高效地加载网络图片、本地文件和视频帧&#xff0c;并且能够自动缓存图片数据&#xff0c;减少网络请求。Glide 具有良好的性能和易用的 API&#xff0c;支持常见的图片加载需求&#xff0c;例如图片压缩、…

scroll、offset、client —— JS三大家族

简介&#xff1a; clientHeight: 元素的可见高度&#xff0c;不包括边框和滚动条&#xff0c;是相对于视口的大小——clientHeight (content height) (padding toppadding bottom)。offsetHeight: 元素的高度&#xff0c;包括边框和滚动条&#xff0c;但不包括外边距 —— o…