精华内容
下载资源
问答
  • 一本介绍web开发框架koa的书,Node.js诞生于2009年,到本书出版时已经有近10个年头。它扩充了JavaScript的应用范围,使JavaScript也能像其他语言一样操作各种系统资源,因此,前端工程化开发的大量工具都开始运行在...
  • Koa与Node.js开发实战(完整版),是完整版,自己亲测,191M,不是从第六章开始的
  • 一本介绍web开发框架koa的书,Node.js诞生于2009年,到本书出版时已经有近10个年头。它扩充了JavaScript的应用范围,使JavaScript也能像其他语言一样操作各种系统资源,因此,前端工程化开发的大量工具都开始运行在...
  • 一本介绍web开发框架koa的书,Node.js诞生于2009年,到本书出版时已经有近10个年头。它扩充了JavaScript的应用范围,使JavaScript也能像其他语言一样操作各种系统资源,因此,前端工程化开发的大量工具都开始运行在...
  • 内容摘要 Node.js 10已经进入LTS时代!其应用场景已经从脚手架、辅助前端开发(如SSR、PWA等)扩展到API中间层、代理层及专业的后端开发。...本书将通过Web开发框架Koa2,引领你进入Node.js的主战场!本书系统讲解了...

    Koa与Node.js开发实战

    内容摘要

    Node.js 10已经进入LTS时代!其应用场景已经从脚手架、辅助前端开发(如SSR、PWA等)扩展到API中间层、代理层及专业的后端开发。Node.js在企业Web开发领域也日渐成熟,无论是在API中间层,还是在微服务中都得到了非常好的落地。本书将通过Web开发框架Koa2,引领你进入Node.js的主战场!
    本书系统讲解了在实战项目中使用Koa框架开发Web应用的流程和步骤。第1章介绍Node.js的安装、开发工具及调试。第2章和第3章介绍搭建Koa实战项目的雏形。第4章详细介绍HTTP基础知识及其实战应用。第5章介绍MVC、模板引擎和文件上传等实用功能。第6~8章介绍数据库、单元测试及项目的优化与部署。第9~13章介绍从零开始搭建时下火爆的微信小程序前端及后台管理应用的全部过程,以及最终的服务器部署,包括HTTPS、Nginx。
    本书示例丰富、侧重实战,以完整的实战项目贯穿全部章节,并提供书中涉及的所有源码及部分章节的配套视频教程,将是前端开发人员立足新领域和后端开发人员了解Node.js并使用Koa2开发Web应用的得力助手。

    前言

    Node.js诞生于2009年,到本书出版时已经有近10个年头。它扩充了JavaScript的应用范围,使JavaScript也能像其他语言一样操作各种系统资源,因此,前端工程化开发的大量工具都开始运行在Node.js环境中。由于Node.js采用事件驱动、非阻塞I/O和异步输出来提升性能,因此大量I/O密集型的应用也采用Node.js开发。掌握Node.js开发,既能极大地拓宽前端开发者的技术知识面,也能拓展前端开发者的生存空间,从目前前端开发者越来越多的环境中脱颖而出。

    由于Node.js仅提供基础的类库,开发者需要自主合理地设计应用架构,并调用大量基础类库来进行开发。为了提升开发效率和降低开发门槛,相关技术社区涌现出不少基于Node.js的Web框架。

    Express框架在Node.js诞生之初出现,并迅速成为主流的Web应用开发框架。在社区中,大量的第三方开发者开发了丰富的Express插件,极大地降低了基于Node.js的Web应用开发成本,同时也带动了大量的开发者选择使用Express框架开发Web应用。但Express框架采用传统的回调方式处理异步调用,对于经验不足的开发者来说,很容易将代码写成“回调地狱”,使开发的应用难以持续维护。在ECMAScript 6的规范中提出了Generator函数,依据该规范,Express的作者TJ Holowaychukhttps://github.com/tj巧妙地开发了co库https://github.com/tj/co,使开发者能够通过yield关键词,像编写同步代码一样开发异步应用,从而解决了“回调地狱”问题。2014年,他基于co库开发了新一代的Web应用开发框架Koa,用官方语言来描述这个框架就是“next generation web framework for Node.js”。

    社区开发者为Koa开发了大量的插件,与Express相比,两者的处理机制存在根本上的差异。Express的插件是顺序执行的,而Koa的中间件基于“洋葱模型”,可以在中间件中执行请求处理前和请求处理后的代码。ECMAScript 7提供了Async/Await关键词,从语法层面更好地支持了异步调用。TJ Holowaychuk在Koa的基础上,采用Async/Await取代co库处理异步回调,发布了Koa第2版(简称Koa2)。随着Node 8 LTS(Long Term Support,长期支持)的发布,LTS版本正式支持ECMAScript 7规范,选择使用Koa开发框架开发的Node.js Web应用也越来越多,Koa框架逐步取代了Express框架。
    尽管目前Koa非常流行,但“纯天然”支持ECMAScript 7语法的Node.js 8在2017年10月才正式发布。目前,市面上介绍Koa的书籍几乎没有,大多介绍的是Express框架,本书可以说是第一本介绍Koa的书籍。本书从Node.js基础、HTTP、Koa框架、数据库、单元测试和运维部署等方面全方位地介绍了应用开发所应具备的知识体系。通过阅读本书,读者可以了解Node.js开发的方方面面,减少实际开发中出现的问题。同时,本书的重点章节也提供了线上代码讲解和视频,读者可以在阅读本书的同时,结合线上代码讲解和视频,更容易地理解本书介绍的知识。

    特别感谢杜珂珂、哈志辉、姜帅、李波、李益、盛瀚钦、田小虎、徐磊、闫萌、赵晨雪(排名不分先后)对线上培训音视频课程资源的开发和支持。

    本书特色

    • 重点章节附带教学视频。

    为了便于读者理解本书的内容,一些基础、重点的内容配有视频教程。读者可以访问https://ikcamp.com,结合书中内容观看视频。

    • 所有源码托管于GitHub。

    为了降低读者获取源码的难度,本书的所有源码都托管于GitHub(https://github.com/ ikcamp),读者也可通过GitHub直接和本书作者沟通。

    • 一线互联网公司Node.js技术栈实战经验总结。

    本书补充了前端开发者所不具备的后端开发技能和规范,介绍了如何开发Koa应用,如何通过ORM(Object Relational Mapping,对象关系映射)类库读写数据库,如何通过单元测试来保障代码质量,如何通过PM2、CI等方式启动并部署Node.js应用,以及如何采用日志、监控来保障线上应用的稳定运行等内容。

    • 典型项目案例解析,实战性强。

    本书第3篇通过云相册小程序开发项目介绍了目前流行的小程序技术,包括小程序登录流程、扫码登录、文件上传、相册管理等功能。通过学习本书的相关内容,读者可以独立开发时下流行的小程序和其需要的后端服务。

    本书知识体系

    第1篇 基础知识(第1~4章)

    这部分介绍了开发Koa应用需要具备的预备知识,包括Node.js入门、遇见Koa、路由和HTTP共4个章节。
    在第1章中,介绍了Node.js的历史和发展过程,以及Node.js基础和环境准备。介绍了NPM(Node Package Manager,Node.js的第三方包管理工具),通过该包管理工具,开发者能够方便地使用大量的第三方软件包。本章还介绍了微软公司推出的免费开发工具:Visual Studio Code编辑器,以及如何使用该编辑器调试Node.js应用。
    在第2章中介绍了Koa的发展历程和作为Koa核心技术的中间件。
    在第3章中介绍了路由的概念,以及Koa中最流行的路由中间件koa-router。
    在第4章中介绍了HTTP的基础知识,以及HTTP的后续协议HTTP/2;介绍了在Node.js中如何获取客户端传递来的数据,如何通过koa-bodyparser中间件获取请求中的body数据等。

    第2篇 应用实战(第5~8章)

    这部分介绍了应用开发各个环节的知识,包含构建Koa Web应用、数据库、单元测试、优化与部署共4个章节。
    在第5章中介绍了MVC架构、模板引擎、静态资源,以及如何输出JSON数据,如何通过koa-multer中间件上传文件等。
    在第6章中介绍了数据库的概念和以MySQL为代表的关系型数据库,以及如何通过ORM类库操作MySQL数据库;介绍了以MongoDB为代表的非关系型数据库,以及如何在Node.js中操作MongoDB;介绍了以Redis为代表的新型缓存数据库,以及如何在Node.js中利用Redis实现Session持久化。
    在第7章中介绍了Chai断言库,它用来检测单元测试过程中的结果是否符合预期;介绍了Mocha测试框架,使用该框架可以编写和运行单元测试代码;介绍了使用SuperTest工具测试HTTP服务,以及通过Nock库模拟HTTP服务请求响应;最后,介绍了Nyc工具,用以检查单元测试的覆盖率、提升代码质量。
    在第8章中介绍了如何记录日志和统一捕获异常,以及如何输出自定义错误页;介绍了如何通过PM2、Docker启动应用,如何通过CI集成发布应用,如何通过Nginx提供HTTPS支持;介绍了如何利用日志等途径监控服务器运行情况,以及如何利用PM2提供的Keymetrics监控云服务器。

    第3篇 项目实战:从零开始搭建微信小程序后台(第9~13章)

    这部分通过介绍时下最流行的小程序开发,结合具体的相册小程序来说明如何开发一个完整的小程序,以及如何部署小程序。其中,汇总本书前面章节的知识介绍了小程序的功能模块、接口开发、小程序开发、管理后台开发和服务部署。
    在第9章中介绍了小程序应具备的产品功能及如何开发小程序门户网站。
    在第10章中介绍了小程序登录流程,扫码登录的逻辑和实现方式,小程序中用到的接口和后台管理系统需要的接口。具体包括如何通过中间件来鉴权,如何统一控制后台管理系统的权限,如何通过Mongoose来定义数据模型和访问、存储数据,如何使用log4js记录日志。
    在第11章中介绍了开发微信小程序的流程,以及如何借助微信开发者工具开发小程序。
    在第12章中介绍了开发后台管理系统的整体架构和设计思路,并提供了一套登录与鉴权的技术方案。
    在第13章中介绍了小程序相关服务的线上部署过程,包括对数据库、Nginx、HTTPS、和Koa服务的部署,具体包括如何通过Nginx实现把多个域名解析到同一台云服务器上,如何通过PM2管理应用。

    本书适合读者

    • Web前端开发人员
    • 对Node.js应用感兴趣的开发人员
    • Node.js开发的自学者
    • 大中专院校相关专业的教师和学生
    • 相关培训机构的学员

    本书由陈达孚、金晶、干珺、张利涛、戴亮、周遥、薛淑英编写。本书涉及的技术知识点较多,作者团队成员虽竭力争取奉献好的作品以使技术得到更好的普及,但难免存在疏漏和不足,读者如有问题或建议,可以直接到iKcamp的GitHub上留言。本书源码也可前往GitHub上获取,地址为https://github.com/ikcamp。本书部分内容配有视频,可前往https://camp.qianduan.group/k...

    本书已经在各大电商网站开始上架,感谢对iKcamp的支持!

    展开全文
  • 由于Koa2已经支持ES6及更高版本,包括支持async方法,所以请读者保证Node.js版本在7.6.0以上。如果需要在低于7.6的版本中应用Koa的async方法,建议使用Babel hook。示例代码如下: require('babel-register'); //...

    技术架构:

    由于Koa2已经支持ES6及更高版本,包括支持async方法,所以请读者保证Node.js版本在7.6.0以上。如果需要在低于7.6的版本中应用Koa的async方法,建议使用Babel hook。示例代码如下:

    require('babel-register');
    
    // 应用的其余 require 需要被放到hook后面
    
    const app = require('./app');

    1.项目初始化

    在安装Koa之前,读者需要先创建项目的目录。新建文件夹koa2-tutorial/用来存放示例代码,然后在koa2-tutorial/根目录下初始化项目,生成配置文件package.json。命令如下:

    npm init

    注意:生成的package.json文件用于管理项目中用到的一些安装包

    项目初始化完成后,在当前目录下新建app.js文件并输出所有程序员都熟知的一句话:

    console.log(“Hello World”)

    打开控制台,进入到目录koa2-tutorial/,执行如下命令:

    node app.js

    如果控制台成功输出“Hello World”,说明环境正常。至此项目的准备工作已经完成。基本的项目结构应该如下所示:

    ├── app.js

    ├── package.json

    2.安装Koa

    Koa的安装过程非常简单,只需通过如下命令即可安装最新版本:

    npm install koa --save

    注意:Koa的版本信息会自动保存在package.json中。

    3.启动服务器

    Koa安装完成之后,修改app.js文件实现启动Web服务器的功能。代码如下所示:

    const koa = require('koa');
    
    const app = new koa();
    
    app.listen(3000, () => {
    
             console.log('server is running at http://localhost:3000');
    
    });

    然后运行app.js文件并打开浏览器访问http://localhost:3000,正常情况下,页面将会显示“Not Found”。这是因为在3000端口下启动服务器并进行访问的时候并没有对HTTP请求进行响应处理,故而报404 Not Found错误。为了让浏览器显示一些信息,代码还需要做些调整。修改app.js,加入一个简单的中间件处理所有请求。代码如下所示:

    app.use(async (ctx, next) => {
    
             await next();
    
             ctx.response.type = 'text/html';
    
             ctx.response.body = '<h1>Hello World</h1>';
    
    });

    注意:此段代码需放置在服务器启动之前。

    重新启动服务器后,再次访问浏览器,将会正常显示“Hello World”。

    本节在线视频地址https://camp.qianduan.group/koa2/2/1/1,可扫描二维码查看本例视频:

    喜欢就和我一起学习这本书《Koa与Node.js开发实战》吧!

     

    展开全文
  • Koa中应用Nunjucks,需要先把Nunjucks集成为符合Koa规格的中间件(Middleware),从本质上来讲,集成后的中间件的作用是给上下文对象绑定一个render(view, model)方法,这样,后面的Controller就可以调用这个方法...

    技术架构:

     

    在Koa中应用Nunjucks,需要先把Nunjucks集成为符合Koa规格的中间件(Middleware),从本质上来讲,集成后的中间件的作用是给上下文对象绑定一个render(view, model)方法,这样,后面的Controller就可以调用这个方法来渲染模板了。

    NPM社区有很多开源爱好者提供的第三方中间件。开发者可以根据实际情况自由选择,也可以像iKcamp团队一样,自己实现集成Nunjucks。本示例中,选用了koa-nunjucks-2模块。

    安装koa-nunjucks-2,命令如下:

    npm install koa-nunjucks-2 --save

    此处的示例代码将会在5.1.3节的基础上继续操作。修改app.js并引入koa-nunjucks-2中间件,同时指定存放视图文件的目录views。项目结构如下:

    ├── controller/
    │     ├── home.js 
    ├── service/
    │     ├── home.js
    ├── views/
    ├── app.js
    ├── router.js
    

    修改app.js文件,部分代码已省略。代码如下:

    01     const nunjucks = require('koa-nunjucks-2');       // 引入模板引擎
    
    02     app.use(nunjucks({
    
    03              ext: 'html',                                 // 指定视图文件默认后缀
    
    04              path: path.join(__dirname, 'views'),            // 指定视图目录
    
    05              nunjucksConfig: {
    
    06                        trimBlocks: true                                 // 开启转义,防止Xss漏洞
    
    07              }
    
    08     }));

    在之前的项目中,视图内容被写在了controller/home.js里面,现在需要把视图部分的代码迁移到views中。新建view/home/login.html,代码如下:

    01     <!DOCTYPE html>
    
    02     <html lang="en">
    
    03              <head>
    
    04                        <title></title>
    
    05                        <meta charset="UTF-8">
    
    06                        <meta name="viewport" content="width=device-width, initial-scale=1">
    
    07              </head>
    
    08     <body>
    
    09     <form action="/user/login" method="post">
    
    10              <input name="name" type="text" placeholder="请输入用户名:ikcamp" />
    
    11              <br/>
    
    12              <input name="password" type="text" placeholder="请输入密码:123456" />
    
    13              <br/>
    
    14              <button>{{btnName}}</button>
    
    15     </form>
    
    16     </body>
    
    17     </html>

    重写controller/home.js中的login方法。代码如下:

    login: async(ctx, next) => {
    
             await ctx.render('home/login',{
    
                       btnName: 'GoGoGo'
    
             });
    
    },

    注意:函数中使用了await语句来异步读取文件,因为需要等待,所以在读取文件之后再进行请求的响应。

    打开浏览器并访问地址http://localhost:3000/user,将会看到一个简易版的登录视图。

    对Nunjucks模板引擎的引入给本项目增加了View层。实现更完善的视图功能还需要增加静态资源目录等,如果能直接使用静态服务器的话更好。后面章节中,将会介绍如何增加静态文件以及对项目的视图进行美化。

    本节在线视频地址https://camp.qianduan.group/koa2/2/1/6,二维码

    喜欢就和我一起学习这本书《Koa与Node.js开发实战》吧!

    展开全文
  • 基于Node.js Koa2实战开发的一套完整的博客项目网站,使用Koa2二次开发套件适合多端的RESTful API,同时配套完整的后台管理系统,并前端展示既有基于ejs服务端渲染,也有基于Vue.js前瞻分离的2套前端网站。...
  • 技术架构: 在实战项目中,经常需要记录下服务器的响应时间,也就是从服务器接收到HTTP请求,到最终返回给客户端...01 const koa = require('koa'); 02 const app = new koa(); 03 app.use(async (ctx, nex...

    技术架构:

    在实战项目中,经常需要记录下服务器的响应时间,也就是从服务器接收到HTTP请求,到最终返回给客户端之间所耗时长。在Koa应用中,利用中间件机制可以很方便的实现这一功能。代码如下所示:

    01     const koa = require('koa');
    
    02     const app = new koa();
    
    03     app.use(async (ctx, next) => {                               // 记录服务器响应时间的中间件
    
    04              let stime = new Date().getTime();               // 记录当前时间戳
    
    05              await next();                                                     // 事件控制权中转
    
    06              let etime = new Date().getTime();               // 所有中间件执行完成后记录当前时间
    
    07              ctx.response.type = 'text/html';
    
    08              ctx.response.body = '<h1>Hello World</h1>';
    
    09              console.log(`请求地址: ${ctx.path},响应时间:${etime - stime}ms`);
    
    10     });
    
    11     app.use(async (ctx, next) => {
    
    12              console.log('中间件 doSoming');
    
    13              await next();
    
    14              console.log('中间件执行 over');
    
    15     });
    
    16     app.listen(3000, () => {
    
    17              console.log('server is running at http://localhost:3000');
    
    18     });

    执行上述代码,控制台打印显示:

    server is running at http://localhost:3000

    然后打开浏览器,访问http://localhost:3000,控制台显示内容更新如下:

    中间件 doSoming
    
    中间件执行 over
    
    请求地址: /,响应时间:1ms
    
    中间件 doSoming
    
    中间件执行 over
    
    请求地址: /favicon.ico,响应时间:0ms

    当服务器接收到HTTP请求后,会以“洋葱模型”的方式开始流转。先进入第一个中间件。在上述代码中,第一个中间件记录下当前时间戳,然后将控制权向下传递,第二个中间件进行相应的逻辑处理,第三个中间件进行相应的逻辑处理……,最后再一层层的返回,直到返回给第一个中间件,然后再次记录下当前时间戳,记录的两次时间戳之间的差值,即为此次HTTP请求的响应时间。

    可能细心的读者会发现,控制台打印了两条记录,这是因为访问http://localhost:3000后,DOM结构在浏览器上进行渲染,会发起相应的静态资源文件的HTTP请求,“/favicon.ico”即为DOM渲染时默认自带的静态资源。

    另外,读者可以思考一下,如果一个中间件没有调用await next(),又会发生什么情况呢?答案是“后面的中间件将不会执行”。读者可以自行验证一下。

    本节在线视频地址https://camp.qianduan.group/koa2/2/1/2,二维码

    喜欢就和我一起学习这本书《Koa与Node.js开发实战》吧!

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,471
精华内容 988
关键字:

koa与node.js开发实战