【koajs项目实践】二、启动文件app.js和引用包package.json介绍

这章节,主要介绍启动文件app.js和项目引入包package.json的介绍
demo里面的中间件可能不是最新的,但是要注意如果要更新到最新版本后,是否会出现不兼容的情况。

package.json

  • koa
    koajs框架使用的是2.x版本,所以node版本必须在7.6.0+,支持ES2015和async函数
  • koa-router
    koa框架的路由层中间件,demo项目是对它进行了封装,通过配置文件的方式,在使用上更加灵活(后续文章会介绍)
  • koa-bodyparser
    解析请求内容,基于co-body,支持json,form,text类型
  • koa2-formidable
    这个中间件主要是处理koa-bodyparser的问题,针对前端表单的提交(form-data),文件上传控制等
  • koa-static
    静态资源中间件,如html、js、css、jpg、png等等
  • koa-ejs
    项目使用的前端模板是ejs模板引擎
  • ioredis
    redis中间件,demo项目中封装在了RedisService接口服务里面,并且是单例模式
    log4js
    日志中间件,demo项目中对其再进行了封装,包括输出路径和格式等
    promise
    promise模块,因为项目有些模块需要用promise包装一下,使其可以使用async/await方式,或者是装配到koa框架内使用(app.use)
    superagent
    http请求模块,demo项目中已将其封装整合到公共库的HttpHelper,基本能满足日常的get/post方法
    superagent-charset
    解决superagent页面编码的问题,可以指定请求解析的页面编码方式
    koa-orm
    orm模块,当前版本是基于sequelizesk2,demo项目已将其再次封装,并抽离出dao层的base类(BaseModel),而且是单例模式
    mysql2
    demo项目使用的mysql数据库,所以这里需要引入对应的模块
  • koa-session2
    session中间件,默认是使用cookie方式,也可以支持redis和mongodb等方式
    lodash
    一个很强大的工具类模块,里面提供了很多实用的api,而且是使用原生js写的,具体可以查看官网
    string
    也是一个很强大的字符工具类模块
    moment
    时间日期处理模块,demo项目中已将其封装整合到公共库的TimeHelper

app.js

  • session引入
/*
    中间件session
    使用cookie方式保存,'key'可以自定义,在前端页面的cookie会看到这个参数
 */
const session = require("koa-session2");
app.use(session({
    key: 'koa-all-framework'
}))

key参数值可自定义,相关值可以通过前端页面调试看到对应的数值,默认通过cookie方式保存

  • 静态资源引入
/*
    静态文件服务器
    一般指定到public目录
 */
const serve = require('koa-static');
app.use(serve(__dirname + '/public'));

这里可以自定义静态文件目录位置,注意路径要加上"_dirname",即总是指向被执行 js 文件的绝对路径

  • 视图层引入
/*
    视图层中间件
    使用ejs,并指定页面文件所在的位置和后缀
 */
render(app, {
    root: path.join(__dirname, '/public/views'),
    layout: false,
    viewExt: 'html',
    cache: false,
    debug: false
});

这里可以自定义视图层文件目录位置、模板后缀等参数,其中"/public/views"为根目录,控制层controller跳转的页面路径以此为起始根位置,然后向下一层层寻找目录路径

  • 表单处理中间件
/*
    表单中间件
    主要解决前端文件提交的问题,并指定上传的临时文件存放的位置

    后端controller可通过以下方式获取:
    let {body, files} = ctx.request
 */
const formidable = require('koa2-formidable');
const formOpt = {
    uploadDir: 'uploads/'
};
app.use(formidable(formOpt));

这里需要注意的一点是引入的顺序,必须要在"koa-bodyparser"之前,因为koa框架是一个洋葱模型,否则表单处理的方法将会被跳过不执行(具体原因可以查看源码并且调试查看两者的区别)
uploadDir参数是上传目录的路径,上传文件时,此目录会先生成一个临时文件,然后再通过重命名的方式修改文件名称

  • 请求体解析模块
/*
    请求体解析中间件
    可解析Json、Raw、文本等格式

    这里需要注意中间件的顺序,formidable需放在bodyparser后面(洋葱模型)
 */
const bodyparser = require('koa-bodyparser');
app.use(bodyparser());

这里要注意的就是上面所说的引入顺序问题

  • 获取真实ip设置
/*
    主要解决获取请求真实IP的问题
 */
app.proxy = true;

koa框架主要通过以下几种方式获取请求的ip:
req.headers[‘x-forwarded-for’] || // 判断是否有反向代理 IP
req.connection.remoteAddress || // 判断 connection 的远程 IP
req.socket.remoteAddress || // 判断后端的 socket 的 IP
req.connection.socket.remoteAddress;

  • 路由模块引入

/*
    封装后的路由中间件
    具体详见该中间件的说明
 */
const routes = require('./app/middleware/routes');
app.use(routes());

一般路由模块放在最后引入,这里使用了demo项目封装好的router中间件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

reui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值