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中,,但是怎么加载这个单独的路由,,
一个项目不是只有一个路由,,可以有很多个路由,,
nodejs01_第1张图片
nodejs01_第2张图片
挨个导入,并使用 这些路由,,
,,
但是路由也会有很多,怎么让他路由自动注册:
使用一个包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"
}

你可能感兴趣的:(node,node.js)