2
Entry

yutent edited this page 2023-11-02 17:33:46 +08:00

入口文件配置

我们先来看一下脚手架默认生成的代码。

import { createApp } from '@gm5/core'

const app = createApp()



// 预加载应用, 这一步是必须的, 且需要在listen方法前调用
app.preload('./apps/')

// 中间件示例
// app.use((req, res, next) => {
//   if (req.method !== 'GET') {
//     res.error('', 401)
//   }
//   next()
// })

// 安装拓展包, 可以应用中通过 this.context.$$log调用到, 
// 在中间件, 或后面的其他拓展包中, 可以直接 this.$$log 调用 
// app.install({
//   name: 'log', 
//   install: function() {
//     return new Logs('run_time.log', './data/logs/')
//   }
// })

app.run()

可以看出, 框架从 实例化 到 启动, 只需要调用2个方法即可, 一是 预加载应用目录, 二是run()。

应用属性

  • .server

当前启动的原生http server对象。一般外部很少用到, 仅当需要配合websocket等服务时用到。

应用方法

接下来, 我们看一下框架实例对外暴露的几个方法。

  • .set(obj<Object>)

这是一个设置框架配置的方法, 传入一个对象, 会自动合并配置, 支持多次调用这个方法。 但要注意的是, 配置合并只支持合并2层, 第3层开始, 全直接替换为最新传入的值。

  • .get(key<String>)

读取配置, 只支持传入第1级的key值, 不支持直接读取子属性。

  • .use(middleWare<Function>)

使用中间件的方法, 传入一个函数, 该函数会在发生http访问时被触发执行, 执行的顺序是调用use方法的顺序。 函数的this指向当前的框架实例 函数执行时, 会传入3个参数, 依次是 request, response, next; 前面2个分别是请求对象和响应对象, 这2个对象的具体功能, 在后面的章节中介绍; 第3个参数是一个函数, 在处理完自己的逻辑时, 必须调用该方法。

  • .install(obj<Object>[, arg<Any>])

安装拓展包的方法, 传入一个对象,对象中必须包含有2个字段, name, install。 name是安装包的名字,该名字决定了安装后如何使用。 install是一个函数, 安装时被立即被调用, 且在启动http服务之前, 意味着该拓展包不能调用到中间件中的任何内容, 也没有request, response。 install函数的this, 指向的是当前框架实例, 默认没有参数传入, 除非安装的时候有带参数。

  • .preload(dir<String>)

预加载应用目录, 这个没啥可说的了, 唯一要注意的是, 必须在listen方法之前调用。

  • .listen(port<Number>)

配置端口, 也可以在set()配置那里设置。

  • .run()

启动服务。