NodeJS入门 0xA Node的Web开发(2)服务器端框架(2)

本文对比了hapi和Sails.js两个Node.js服务器框架。hapi专注于Web API开发,具有强大的插件系统和路由API;Sails.js则是一款MVC框架,内置ORM,能自动生成REST API,支持WebSocket等现代功能。两者各有优势,hapi适用于服务器扩展和管理,Sails.js则简化了项目创建和REST API的快速搭建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hapi

    hapi 是个服务器框架,它的重点是 Web API 的开发。 hapi 有自己的插件 API,完全没有客户端支持,也没有数据模型层。 hapi 有路由 API 和它自己的 HTTP 服务器封装。在 hapi 中设计 API,要把服务器当作主抽象。从 DevOps 的观点来看, hapi 自带的连接和日志功能使得它易于扩展和管理。

    设置

     创建项目 

mkdir listing5_2
cd listing5_2
npm init -y
npm install --save hapi@13.3.0
//server.js
const Hapi = require('hapi');
const server = new Hapi.Server();

server.connection({
    host:'localhost',
    port:8000
});
server.start((err)=>{
    if(err){
        throw err;
    }
    console.log('Server running at:',server.info.uri);
});

    定义路由

    hapi 有创建路由的 API。要创建路由,必须提供一个包含请求方法、 URL 和回调函数的对象,其中的回调函数就是路由处理器。

const Hapi = require('hapi');
const server = new Hapi.Server();

server.connection({
    host:'localhost',
    port:8000
});
server.route({
    method:'GET',
    path:'/hello',
    handler:(request,reply)=>{
        return reply('hello hapi')
    }
});
server.start((err)=>{
    if(err){
        throw err;
    }
    console.log('Server running at:',server.info.uri);
});

    插件

    hapi 有自己的插件架构,并且大部分项目都需要靠插件完成认证和输入校验等功能。 inert是大多数项目都需要的简单插件,它提供了静态文件和目录处理器。

npm install --save inert@3.2.0
const Inert = require('inert');

server.register(Inert,()=>{});
server.route({
    method:'GET',
    path:'/{param*}',
    handler:{
        directory:{
            path:'.',
            redirectToSlash:true,
            index:true
        }
    }
});

     REST API

    hapi 支持 HTTP 动词和 URL 参数化,允许用标准的 hapi 路由 API 实现 REST API。

server.route({
    method:'DELETE',
    path:'item/{id}',
    handler:(req,reply)=>{
        //基于req.params.id删除
        reply(true);
    }
});

     优点

    hapi 的插件 API 是它最大的优势。插件不仅能扩展 hapi 的服务器,还可以添加各种各样的功能,比如数据校验和模板等。另外,由于 hapi 是基于 HTTP 服务器的,所以适合用在某些部署场景中。如果要部署很多相互连接的服务器,或者需要做负载均衡时, hapi 基于服务器的 API 可能比 Express 或 Koa 好用。

    弱点

      hapi 的弱点跟 Express 一样:极简,所以对项目结构没有把控。我们永远也不知道哪个插件的开发会停下来,所以过于依赖插件可能会造成将来难以维护。

 Sails.js

   这是一个模型视图控制器框架。 Sails 有一个跟数据库协同作用的对象关系映射(ORM)库,还能自动生成 REST API。它支持 WebSocket 等现代化的功能。如果你喜欢用 React 或 Angular,应该会很高兴它是前端无关的: Sails 不是全栈框架,所以可以跟任何前端库或框架配合使用。

 

    设置

    Sails 有项目生成器,所以最好是全局安装,这样创建新项目会更轻松。

npm install -g sails
sails new example-project

    定义路由

    Sails 中将路由称为定制路由,打开 config/routes.js,在输出的路由中添加新的属性即可添加路由。属性的格式是 HTTP 动词加上部分 URL。

/**
 * Route Mappings
 * (sails.config.routes)
 *
 * Your routes tell Sails what to do each time it receives a request.
 *
 * For more information on configuring custom routes, check out:
 * https://sailsjs.com/anatomy/config/routes-js
 */

module.exports.routes = {

  /***************************************************************************
  *                                                                          *
  * Make the view located at `views/homepage.ejs` your home page.            *
  *                                                                          *
  * (Alternatively, remove this and add an `index.html` file in your         *
  * `assets` directory)                                                      *
  *                                                                          *
  ***************************************************************************/

  //'/': { view: 'pages/homepage' },
  'get /example':{view:'example'},
  //需要文件 view/example.ejs
  'post /items':'ItemController.create'
  //需要有 create 方法的 api/controllers/ItemController。
  //运行命令 sails generate controller item create 可以生成带有 create方法的控制器。

  /***************************************************************************
  *                                                                          *
  * More custom routes here...                                               *
  * (See https://sailsjs.com/config/routes for examples.)                    *
  *                                                                          *
  * If a request to a URL doesn't match any of the routes in this file, it   *
  * is matched against "shadow routes" (e.g. blueprint routes).  If it does  *
  * not match any of those, it is matched against static assets.             *
  *                                                                          *
  ***************************************************************************/


};

     REST API

    Sails 将数据库模型和控制器结合进了 API 中,可以用命令 sails generate api resourcename 生成 RESTful API。要使用数据库,首先需要安装数据库适配器。找到 Waterline MySQL 包的名字,然后把它添加到项目中:

npm install --save waterline sails-mysql

    接下来,打开 config/connections.js,将 MySQL 服务器的连接信息填好。 Sails 模型文件中可以指定数据库连接,所以不同的模型可以使用不同的数据库。也就是说可以把用户会话数据放在Redis 之类的数据库中,而把需要持久保存的数据放到 MySQL 这样的关系型数据库中。
    Waterline 是 Sails 的数据库系统库,除了支持多个数据库,它还能定义表和列名,以支持遗留的数据库模式。另外,它的查询 API 支持 promise,因此查询看起来很像现代化的 JavaScript。

     优点


    自带的项目创建和 API 生成意味着可以快速设置项目,快速添加典型的 REST API。因为Sails 项目的文件系统结构都是一样的,所以也有利于创建新项目和相互协作。 Sails 的创建者Mike McNeil 和 Irl Nathan 共同写了本书,叫 Sails in Action,书中阐述了 Sails 对 Node 新手是多么友好。
   

    弱点

    Sails 的弱点跟其他服务器端 MVC 框架一样:路由 API 意味着我们在设计程序时必须考虑到Sails 的路由特性,并且由于 Waterline 的处理方式,可能很难将数据库模式调整为符合它的要求的样子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值