nodejs01

news2024/12/25 2:04:03

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"
}

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

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

相关文章

基于FFmpeg的短视频编辑工具Cut

前言 最近在学习FFmpeg和音视频的相关知识,为了加强对FFmpeg的认识和了解,于是撸了一个短视频编辑软件Cut。 效果图先行: 技术点 启动页优化 但启动app的时候会有一个短暂的黑屏或者白屏。为什么呢? 是因为在App启动时&#x…

497 蓝桥杯 成绩分析 简单

497 蓝桥杯 成绩分析 简单 //C风格解法1&#xff0c;*max_element&#xff08;&#xff09;与*min_element&#xff08;&#xff09;求最值 //时间复杂度O(n)&#xff0c;通过率100% #include <bits/stdc.h> using namespace std;using ll long long; const int N 1e4 …

【Spring Cloud】组件概念详解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Spring Cloud》。&#x1f3af;&#x1f3af; &am…

CentOS中开启mysql挂载

挂载的作用其实说白了就是备份。防止数据库文件损害或者数据库被误删导致数据丢失。 创建一个文件名为my.cnf内容如下 # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modif…

清理windows中git凭证

清理windows中git凭证 控制面板——>用户账户——>凭据管理器——>管理Windows凭据 点开后如下&#xff1a;

面试之线程状态

1.线程有哪些状态 1.1Java线程的六种状态 Java 线程六种状态 新建 当一个线程对象被创建&#xff0c;但还未调用 start 方法时处于新建状态 此时未与操作系统底层线程关联 可运行 调用了 start 方法&#xff0c;就会由新建进入可运行 此时与底层线程关联&#xff0c;由操作…

Hadolint:Lint Dockerfile 的完整指南

想学习如何使用 Hadolint 对 Dockerfile 进行 lint 处理吗&#xff1f;这篇博文将向您展示如何操作。这是关于 Dockerfile linting 的完整指南。 通过对 Dockerfile 进行 lint 检查&#xff0c;您可以及早发现错误和问题&#xff0c;并确保它们遵循最佳实践。 什么是Hadolint…

windows 查看所有端口占用情况

winR&#xff0c;调出cmd窗口&#xff1a; 输入命令 netstat -ano 内容太多&#xff0c;显示不全&#xff0c;怎么办? 输入下面命令 netstat -ano > d:\1.log 在d盘根目录下就产生了 输出文件 打开可以看到如下内容 活动连接协议 本地地址 外部地址 状…

2.3_7 生产者-消费者问题

2.3_7 生产者-消费者问题 系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注:这里的“产品”理解为某种数据) 生产者、消费者共享一个初始为空、大小为n的缓冲区。 只有缓冲区没满时,生产者才…

Kotlin协程学习之-01

由于协程需要支持挂起、恢复、因此对于挂起点的状态保存就显得机器关键。类似的&#xff0c;线程会因为CPU调度权的切换而被中断&#xff0c;它的中断状态会保存在调用栈当中&#xff0c;因而协程的实现也按照是否开辟相应的调用栈存在以下两种类型&#xff1a; 有栈协程&…

weak_ptr如何能做到解决循环引用又能传递参数呢?

引子&#xff1a;今天在看CLR via C#的时候看到C#的垃圾回收算法--引用跟踪算法的时候想到以下几个问题。 一、引用计数法存在的问题 一般引用计数法存在的问题就是不好处理循环引用的问题&#xff0c;但是C不是有weak_ptr吗&#xff1f; 这个引用跟踪的垃圾回收算法看起来还…

vivado xsim 终端 模拟

只模拟的话直接终端运行会快很多 计数器举例 mkdir srccounter.v module counter(input wire clk,input wire rst_n,output reg[31:0] cnt ); always (posedge clk or negedge rst_n)if(!rst_n)cnt < 31h0;elsecnt < cnt1;endmodule tb.v module tb; wire[31:0] out…

C语言编译器(C语言编程软件)完全攻略

介绍常用C语言编译器的安装、配置和使用。 常用的C语言编译器&#xff08;编程软件&#xff09;介绍&#xff0c;同时附带下载地址、详细的安装教程和使用教程。我们还对比了不同C语言编译器&#xff08;C语言编程软件&#xff09;的优缺点&#xff0c;让初学者知道该如何选择…

WPF 使用矢量字体图标

矢量字体图标 在WPF项目中经常需要显示图标&#xff0c;但是项目改动后&#xff0c;有时候需要替换和修改图标&#xff0c;这样非常麻烦且消耗开发和美工的时间。为了快速开发项目&#xff0c;节省项目时间&#xff0c;使用图标矢量字体图标是一个非常不错的选择。 矢量字体图标…

Java Swing手搓童年坦克大战游戏(I)

前言 业余偶尔对游戏有些兴趣&#xff0c;不过这样的时代&#xff0c;硬件软件飞速进步&#xff0c;2D游戏画面都无比精美&#xff0c;之前的8bit像素游戏时代早就过去了&#xff0c;不过那时候有许多让人印象深刻的游戏比如魂斗罗、超级玛丽、坦克大战(Battle City)等等。 学…

案例102:基于微信小程序的旅游社交管理系统设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Robot Operating System 2: Design, Architecture, and Uses In The Wild

Robot Operating System 2: Design, Architecture, and Uses In The Wild (机器人操作系统 2&#xff1a;设计、架构和实际应用) 摘要&#xff1a;随着机器人在广泛的商业用例中的部署&#xff0c;机器人革命的下一章正在顺利进行。即使在无数的应用程序和环境中&#xff0c;也…

C语言基础知识(5):TCP网络编程

TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构&#xff0c;当应用程序采用 TCP 发送消息时&#xff0c;虽然可以保证发送的顺序&#xff0c;但还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输&#xff0c;实行“顺序控制”或“重发控制”机制。此…

学习笔记——C++中的循环结构 while语句

while循环语句 作用&#xff1a;满足循环条件&#xff0c;执行循环语句 语法&#xff1a;while&#xff08;循环条件&#xff09;{循环语句} 解释&#xff1a;只要循环条件的结果为真&#xff0c;就执行循环语句 以打印0-9这十个数字为例&#xff0c;特别需要注意的是&…

MySQL之视图索引执行计划

目录 一.视图 二.执行计划 2.1.什么是执行计划 2.2.执行计划的作用 三.使用外连接、内连接和子查询进行举例 四.思维导图 好啦今天就到这里了哦&#xff01;&#xff01;&#xff01;希望能帮到你哦&#xff01;&#xff01;&#xff01; 一.视图 含义 &#xff1a;在数…