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.hqwc.cn/news/327971.html

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

相关文章

Nginx快速入门:Nginx实现高可用|结合keepalived实现主备节点(九)

0. 引言 在生产中我们要尽可能避免单点故障,nginx也不例外,因此搭建主备节点必不可少,今天我们来学习下如何利用keepalived实现主备 1. keepalived简介 keepalived 是一个LINUX系统中开源的负载均衡和故障转移软件,它主要用于高…

Qt pro文件

1. 项目通常结构 2.pri文件 pri文件可定义通用的宏,例如创建一个COMMON.pri文件内容为 COMMON_PATH D:\MyData 然后其它pri或者pro文件如APPTemplate.pro文件中通过添加include(Common.pri) ,QtCreator就会自动在项目结构树里面创建对应的节点 3.变量…

thinkphp6入门(15)-- 模型动态构建查询条件

背景 我使用thinkphp6的模型写数据库查询,有多个where条件,但是不确定是否需要添加某个where条件,怎么才能动态得生成查询 链式查询 在ThinkPHP 6中,可以使用链式查询方法来动态地构建查询条件。可以根据参数的值来决定是否添加…

[java小贴士]关于double类型进行运算时有误差的相等判断的替代方式

double类型在进行运算时会产生误差, 在不能进行相等判断时可以用绝对值在小于某个范围来替代相等; 如果没有进行运算, 是查询得到或者直接赋值则可以正常进行判断相等

docker拉取镜像提示 remote trust data does not exist for xxxxxx

1、How can I be sure that I am pulling a trusted image from docker 2、docker: you are not authorized to perform this operation: server returned 401. 以上两个问题可以试试以下解决办法 DOCKER_CONTENT_TRUSTfalse 本人是使用jenkins部署自己的项目到docker容器出现…

腾讯云取消免费10G CDN流量包:免费CDN时代结束

关注卢松松,会经常给你分享一些我的经验和观点。 免费送了7-8年的腾讯云10G免费流量包,从2024年开始,停止赠送了!自此,国内绝大多数互联网大厂的CDN都开收费了! 大概从2016年开始,腾讯云为了抢夺CDN客户&#xff0…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第21套

少儿编程 蓝桥杯青少组科技素养题真题及解析第21套 1、小李说:“冰激凌太凉了。”小王说:“冰激凌可以由牛奶制作。”小李说的是()小王说的是() A、事实 事实 B、事实 观点 C、观点 事实 D、观点 观点 答案:C 考点分析:主要考查小朋友们的对事实和观点的认识:小李…

企业微信开发:自建应用:接收消息(企业内部服务器)/回调配置

概述 在企业微信的自建应用中,用户触发了某些行为(发送消息、进行菜单操作或者外部联系人变更等),要发送相关信息给企业内部服务器。 备注:接收消息 和 回调,在本文中指代相同的行为,即企业微信…

计算机网络-VLAN原理与配置

之前我们学习了以太网的基础知识,了解了网络交换设备的发展,交换机的工作原理,广播域和冲突域。 一、概述 还简单了解了以太网的CSMA/CD通讯机制,以太网是建立在CSMA/CD (Carrier Sense Multiple Access/Collision Detection&…

基于Python新闻推荐系统 大数据毕业设计 爬虫+可视化+推荐算法 vue框架+Django框架(附源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

Halcon计算一个区域的最大内接圆 inner_circle

Halcon计算一个区域的最大内接圆 该算子用于计算一个区域的最大内接圆,其原型如下: inner_circle(Regions : :: Row, Column, Radius)参数1:Regions 表示输入的区域。 参数2和3:Row、Column为输出参数,表示最大内接圆…

大数据Doris(五十一):Colocation Join介绍

文章目录 Colocation Join介绍 一、原理 二、使用方式 1、建表 2、删表