Node.js框架对比:Express/Koa/Hapi(2)

  上面的操作对于大多数Node开发者来说应该都是很熟练了。我们先引入express,然后创建一个实例对象并将其赋值给变量app。接下来是实例化一个服务,并且开始监听3000端口。app.listen() 其实就是对nodejs原生的http.createServer()进行了一层封装。

3.2、Koa 

 

var koa = require('koa'); var app = koa(); var server = app.listen(3000, function() { console.log('Koa is listening to :3000'); }); 

 

  显而易见,Koa的语法和Express非常相似。其实来说你只需要将引入express修改为引入koa即可。同样的,app.listen() 也是对http.createServer()进行了一层封装。

3.3、Hapi 

 

var Hapi = require('hapi'); var server = new Hapi.Server(3000); server.start(function() { console.log('Hapi is listening to :3000'); });

 

  Hapi的语法比较特别一些。不过,第一步还是引入hapi,但是这里是实例化存入一个hapi app变量中,然后就可以创建一个指定端口的服务了。在Express和Koa中这一步我们得到的是一个回调函数,但是Hapi返回的是一个server对象。一旦我们通过server.start()来调用这个在3000端口的服务以后,他将会返回一个回调函数。然后跟Koa和Express不一样的地方在于,这个回调并不是对http.CreateServer()进行的一层封装,而是Hapi自己实现的逻辑。

4、路由

  接下来我们继续深入了解作为一个服务的一个重���功能,那就是路由。第一步我们将使用每个框架来分别创建一个“Hello World”应用,然后再继续关注一些更实用的功能,REST API。

4.1 Hello World 4.1.1  Express

var express = require('express'); var app = express(); app.get('/', function(req, res) { res.send('Hello world'); }); var server = app.listen(3000, function() { console.log('Express is listening to :3000'); });

  我们使用get()方法来捕获“GET /”请求,然后调用一个回调函数来处理请求,该回调函数拥有两个参数:req与res。在这个例子中我们仅仅使用了res的res.send()方法来向页面返回一个字符串。Express包含了很多内置的方法来处理路由功能。下面是几个Express中常用的方法(只是部分,并不是全部方法):get, post, put, head, delete…

4.1.2 Koa 

var koa = require('koa'); var app = koa(); app.use(function *() { this.body = 'Hello world'; }); var server = app.listen(3000, function() { console.log('Koa is listening to :3000'); });

 

  Koa和Express有些许的不同之处,因为他使用了ES6 的generators语法。(注:generators是ES6提出的一种异步回调的解决方法,在ES7中将直接升级为async/await)在方法前面加上一个 * 表示该方法返回一个generator对象。generators函数的作用就是使得异步函数产生一些同步的值,但是这些值仍然是在当前的请求范围之类。(注:generator对通过yield 定义不同的状态值,return也算是一个状态值。generator函数对响应体进行赋值。在Koa中this对象,其实就是对node的request与response对象进行的封装。this.body在Koa中是一个响应体对象的方法。它基本上能被赋值为任何值,字符串、buffer、数据流、对象或者是null。Koa核心库提供了很多中间件,这里我们只是使用了其中的一个,这个中间件可以捕获所有的路由,然后响应一个字符串。

4.1.3 Hapi

 

var Hapi = require('hapi'); var server = new Hapi.Server(3000); server.route({ method: 'GET', path: '/', handler: function(request, reply) { reply('Hello world'); } }); server.start(function() { console.log('Hapi is listening to :3000'); });

  这里我们使用了由server对象提供的一个内置方法:server.route(),这个方法需要这些参数:path(必填)、method(必填)、vhost以及handler(必填)。这个HTTP方法可以处理我们常见的GET/PUT/POST/DELETE请求,也可以使用*来处理所有路由请求。回调函数会被Hapi默认传入request对象以及reply方法,reply是必须被执行的方法,而且需要传入一项数据,这个数据可以是字符串、序列化的对象或者流。

4.2 REST API

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/555cf68a10a2f0d02545c6f071829610.html