1、5.4.12. 建立工程下面我们就开始创立Koa2的工程,接下来的操作在window与linux通用,只是编辑器不同而已。进入window的开发目录,新建工程koa2-demo1。# 进入开发目录 cd d:workspacejs# 新建工程、并进入工程目录 mkdir koa2-demo1 & cd koa2-demo1创立一个node工程 d:workspacejskoa2-demo1npm initThis utility will walk you through creating a package.json file.It only covers the most common i
2、tems, and tries to guess sensible defaults.See npm help json for definitive documentation on these fieldsand exactly what they do.Use npm install afterwards to install a package andsave it as a dependency in the package.json file.Press C at any time to quit.package name: (koa2-demo1)version: (1.0.0)
3、description: koa2 demoentry point: (index.js)test command:git repository:keywords:author: DanZhanglicense: (ISC) MITAbout to write to d:workspacejskoa2-demo1package.json:name: koa2-demo1,version1.0.0descriptionkoa2 demomainindex.jsscripts testecho Error: no test specified & exit 1,authorDanZhanglice
4、nseMITIs this ok? (yes) yes这样我们就完成了一个最简单的nodejs工程,在当前的目录下面生成了package.json的文件。接下来,我们来安装koa2的库,到当前的工程中。 npm install koa -s+ koa2.3.0added 37 packages in 12.462s查看当前目录,发现生成了一个node_modules的目录,这个目录存放了koa包所有的依赖的库。然后,我们新建一个启动文件:index.js,用来启动Koa的工程。 notepad index.jsvar koa = require(koa);var app = new koa()
5、;app.use(function *()this.body = Hello World;);app.listen(3000);启动工程 node index.js翻开浏览器: :/localhost:3000/请点击此处输入图片描述看到这界面,那么恭喜你,第一步成功了。3. 通过koa-generator来建立工程Koa和Express工程一样,都提供了一种脚手架的方式来创立工程,使用这么方式会极大地提高开发的效率,但不建议初学者直接使用,高度自动化的生成器,可能会让你不理解实现的原理。接下来,我们用koa-generator来生成一个koa的工程。安装koa-generator,这是一个命
6、令工具,所以需要全局安装。 npm install -g koa-generator然后,我们创立koa2的工程时,就可以直接使用koa2的命令了。# 生成koa2工程 koa2 koa2-demo2 create : koa2-demo2 koa2-demo2/package.json koa2-demo2/app.js koa2-demo2/public koa2-demo2/public/stylesheets koa2-demo2/public/stylesheets/style.css koa2-demo2/public/javascripts koa2-demo2/public/i
7、mages koa2-demo2/routes koa2-demo2/routes/index.js koa2-demo2/routes/users.js koa2-demo2/views koa2-demo2/views/index.pug koa2-demo2/views/layout.pug koa2-demo2/views/error.pug koa2-demo2/bin koa2-demo2/bin/www install dependencies: cd koa2-demo2 & npm install run the app: SET DEBUG=koa* & npm start
8、 koa2-demo2进入工程,并安装依赖库 cd koa2-demo2 & npm run start koa2-demo20.1.0 start d:workspacejskoa2-demo2 node bin/www翻开浏览器如果你看到的界面,和上面的一样,那么恭喜你,用koa-generator生成的koa2的工程,也能正常工作了。这里你可以发现,用koa-generator时,只要一条命令就够了,程序会给你生成很多文件,直接就构建好了一个工程的根底。4. 目录结构接下来,我们就基于koa2-demo2的工程来分析,看一下生成出来的工程目录结构。我们用一个文本编辑器来翻开这个工程,这样
9、可以看得更清楚一些。bin, 存放启动工程的脚本文件node_modules, 存放所有的工程依赖库。public,静态文件(css,js,img)routes,路由文件(MVC中的C,controller)views,页面文件(pug模板)package.json,工程依赖配置及开发者信息app.js,应用核心配置文件package.json,node工程配置文件package-lock.json,node工程锁定的配置文件5. app.js 文件分析app.js 是应用核心配置文件,我们把这个文件能够看明白,整理koa就非常容易了。app.js文件,我们可以分割为X个局部进行解读:依赖包加
10、载、错误处理、中间件加载、web界面渲染模板、自定义日志、自己定义路由、外部调用接口。/ 依赖包加载const Koa = require()const app = new Koa()const views = require(koa-viewsconst json = require(koa-jsonconst onerror = require(koa-onerrorconst bodyparser = require(koa-bodyparserconst logger = require(koa-loggerconst index = require(./routes/indexcon
11、st users = require(./routes/users/ 错误处理onerror(app)/ 中间件加载app.use(bodyparser(enableTypes:json, formtext)app.use(json()app.use(logger()app.use(require(koa-static)(_dirname + /public)/ web界面渲染模板app.use(views(_dirname + /views, extension: pug/ 自定义日志app.use(async (ctx, next) =const start = new Date()awa
12、it next()const ms = new Date() - startconsole.log($ctx.method $ctx.url - $msms)/ 自己定义路由app.use(index.routes(), index.allowedMethods()app.use(users.routes(), users.allowedMethods()/ 外部调用接口module.exports = app麻雀虽小,五脏俱全!通过app.js的配置,就可以把一个web工程给组装起来了。6. 路由管理普通的web应用,通常都是多个页面组成,每个页面会对应一个URL的地址,用户在浏览器输入UR
13、L可以翻开不同的页面。路由管理,就是把URL和页面的关系对应起来的。在 app.js 中,路由来提取到 ./routes/index.js 和 ./routes/users.js 两个文件中进行实现了。以 ./routes/index.js 文件来举例说明。 notepad ./routes/index.jsconst router = require(koa-router)()/ 解析/router.get(, async (ctx, next) = await ctx.render(indextitle:Hello Koa 2!/ 解析 /stringctx.body = koa2 str
14、ing/jsonctx.body = koa2 jsonmodule.exports = router从代码中分析,当路径为/时,网页会返回Hello Koa 2!;当路径为/string时,网页会返回koa2 string;哪路径是/json时,网页会返回koa2 json。7. 页面渲染从上面路由中,我们看到路径/的输出,是一个被渲染为网页输出,而/string和/json的输出是直接字符的输出。传统的web应用,大都是后台渲染的机制。新型的单面应用来说,前后端别离的设计,根本不需要后端来渲染,直接输出json就可以了。对后台渲染的实现,我们可以参考/的实现。上面代码中,通过 await
15、ctx.render(index,) 这样的语法,就可以加载pug的模板引擎。await是ES6的关键字,用于把异步代码同步化,就不再写回调函数了(callback)。ctx.render()函数,用于加载渲染引擎。然后,我们找到views中的index.pug文件。 notepad ./views/index.pugextends layoutblock contenth1= titlep Welcome to #title在index.pug文件中,有一个参数是后台传过来的,就是title,同时index.pug继承了layout.pug。再翻开layout.pug文件。doctype h
16、tmlhtmlheadtitle= titlelink(rel=stylesheet, href=/stylesheets/style.cssbodylayout.pug文件,是整个html的骨架,这样就可以通过后台要渲染为一个HTML的网页了。翻开chrome浏览品质开发人员工具,看到HTML的代码的结构,与layout.pug和index.pug结构是一致的。8. 日志分析最后要说的就是效劳器日志了,每一次的浏览行为,都会产生一条效劳器日志,用于记录用户的访问情况。我们后台通过命令行启动后,后台的效劳器就会一直存活着,接收浏览器的请求,同时产生日志。日志中,200表示正常访问,404是没有对应的URL错误。你会看到每次访问的路径都被记录了,包括后台的路径和css的文件路径,还包括了访问协议,响应时间,页面大小等。我们可以自定义日志格式,记录更多的信息,也可以记录对自己有用的信息。这样我们就构建出一个最小化的web应用了。Nodejs的开展速度,远远超越了其他语言的开展,我看好Nodejs,希望能给入门Nodejs的朋友一些帮助。加油!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1