资讯专栏INFORMATION COLUMN

Koa项目基本要点

Miracle / 1021人阅读

摘要:中的加基本上已成为的标配。许多项目已开始使用非关系型数据库。项目构建这里一定要用常用中间件介绍生成的应用已经包含常用中间件了,这里仅说它里面没有用到的。

Java中的Spring MVC加MyBatis基本上已成为Java Web的标配。Node JS上对应的有Koa、Express、Mongoose、Sequelize等。Koa一定程度上可以说是Express的升级版。许多Node JS项目已开始使用非关系型数据库(MongoDB)。Sequelize对非关系型数据库(MSSQL、MYSQL、SQLLite)做了支持。
Koa项目构建
cnpm install -g koa-generator

// 这里一定要用koa2
koa2 /foo
Koa常用中间件介绍

koa-generator生成的应用已经包含常用中间件了,这里仅说它里面没有用到的。

koa-less
app.use(require("koa-less")(__dirname + "/public"))

必须在static前use,不然会无效。
stylesheets文件夹下新建styles.less,并引入所有模块化less文件。

@import "foo.less";
@import "bar.less";

这样所有的样式会被编译成一个style.css。在模板(pug)中引用style.css就行了。

koa-session
// 设置app keys,session会根据这个进行加密
app.keys = ["some secret hurr"];
// 配置session config
const CONFIG = {
    key: "bougie:session",
    /** (string) cookie key (default is koa:sess) */
    maxAge: 1000 * 60 * 60 * 24 * 7,
    overwrite: true,
    /** (boolean) can overwrite or not (default true) */
    httpOnly: true,
    /** (boolean) httpOnly or not (default true) */
    signed: true,
    /** (boolean) signed or not (default true) */
    rolling: true,
    /** (boolean) Force a session identifier cookie to be set on every response. The expiration is reset to the original maxAge, resetting the expiration countdown. (default is false) */
    renew: false,
    /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/
};

// 应用中间件
app.use(session(CONFIG, app));

这个必须在router前use,不然会无效。
基本使用,可以当成一个普通对象

// 赋值
ctx.session.statu = value
// 取值
ctx.session.statu
// 删除
ctx.session.statu = null
koa-proxies

用于代理配置

const proxy = require("koa-proxies")
app.use(proxy("/octocat", {
    target: "https://api.github.com/users",    
    changeOrigin: true,
    agent: new httpsProxyAgent("http://1.2.3.4:88"),
    rewrite: path => path.replace(/^/octocat(/|/w+)?$/, "/vagusx"),
    logs: true
}))
路由控制

开发主要集中在路由控制这里,包括restful接口和模板渲染

获取参数(request) 查询参数(?param=a)
ctx.query.param
路由参数(/:id)
ctx.params.id
POST参数(JSON或Form)
ctx.request.body
请求回应(response)

服务器响应给客户端的数据

restful
ctx.body = yourData
模板渲染

默认从views目录开始,不许加文件后缀

ctx.render("layout", yourData)
路由拦截

未登录时拒绝请求,这样会返回404

const userAuth = (ctx, next) => {
    let isLogin = ctx.session.isLogin
    if(isLogin) return next()
}
router.use("/", userAuth)

此操作会包含在路由,如"/a"、"/b"等,需在子路由之前use,不然会无效

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94321.html

相关文章

  • 【全文】狼叔:如何正确的学习Node.js

    摘要:感谢大神的免费的计算机编程类中文书籍收录并推荐地址,以后在仓库里更新地址,声音版全文狼叔如何正确的学习简介现在,越来越多的科技公司和开发者开始使用开发各种应用。 说明 2017-12-14 我发了一篇文章《没用过Node.js,就别瞎逼逼》是因为有人在知乎上黑Node.js。那篇文章的反响还是相当不错的,甚至连著名的hax贺老都很认同,下班时读那篇文章,竟然坐车的还坐过站了。大家可以很...

    Edison 评论0 收藏0
  • 【全文】狼叔:如何正确的学习Node.js

    摘要:感谢大神的免费的计算机编程类中文书籍收录并推荐地址,以后在仓库里更新地址,声音版全文狼叔如何正确的学习简介现在,越来越多的科技公司和开发者开始使用开发各种应用。 说明 2017-12-14 我发了一篇文章《没用过Node.js,就别瞎逼逼》是因为有人在知乎上黑Node.js。那篇文章的反响还是相当不错的,甚至连著名的hax贺老都很认同,下班时读那篇文章,竟然坐车的还坐过站了。大家可以很...

    fengxiuping 评论0 收藏0
  • 从零组装新工具 - Koa2

    摘要:返回后,代表操作已完成,记录结束时间并输出。从零组装因为对的学习和使用,知道了自己对于后台框架的真实需求。所以这回决定不用之内的工具,而是自己从零开始,组装一个适合自己的框架。就是去和上,寻找一个一个的包并组装在一起了而已。 起因 作为一个前端,Node.js算是必备知识之一。同时因为自己需要做一些后台性的工作,或者完成一个小型应用。所以学习了Node的Express框架,用于辅助和加...

    sutaking 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<