美文网首页ionic开发
ionic 后台Api服务, 使用rest-hapi , nod

ionic 后台Api服务, 使用rest-hapi , nod

作者: caiyaming | 来源:发表于2018-06-29 16:25 被阅读14次

    使用node.js创建RESTful 的API Service, 可以选择的框架有 hapi, express 等。 这里笔者推荐使用 hapi框架,会自动创建model 的 CRUD endpoints ,简单易行。 使用过express, 还是有不少坑的, 尤其在client和server端数据交互时,使用中间件body-parse 问题不少, 笔者将在下一篇文章详述。

    1. 安装最新版本 Node.js . Node.js官方下载

    2. 使用 Visual Studio Code 打开一个空的文件夹, 比如 c:\work\ionic\hapi-demo-service ,

    3. 打开Visual Studio Code的终端,输入 npm init , 出现如下所示的信息, 直接按回车使用默认设置即可。也可输入内容替换默认信息。知道出现提示 : is it OK? (yes) ,输入yes 即可。 这时会在hapi-demo-service根目录下生产package.json文件。

    C:\Work\Ionic\hapi-demo-service>npm init
    This utility will walk you through creating a package.json file.
    It only covers the most common items, and tries to guess sensible defaults.
    
    See `npm help json` for definitive documentation on these fields
    and exactly what they do.
    
    Use `npm install <pkg>` afterwards to install a package and
    save it as a dependency in the package.json file.
    
    Press ^C at any time to quit.
    package name: (hapi-demo-service) hapi-demo-service
    version: (1.0.0)
    description: hapi demo service
    entry point: (index.js)
    ...
    Is this OK? (yes) yes
    
    1. 安装开发包。依次在终端中运行 npm i Hapi --save , npm i mongoose --save

    2. 安装 rest-hapi插件. 终端中输入 npm i rest-hapi --save

    3. 生成service入口类(或者是主类) touch index.js. (index.js 是默认设置, 请参考package.json文件,main节点。
      将如下代码拷贝到index.js

     const Hapi = require("hapi");
    let mongoose = require('mongoose');
    let RestHapi = require('rest-hapi');
     
     
    async function api(){
        try {
          let server = Hapi.Server({
            //Amin: host is important for IOS system. If missing host, the in IOS, it would use machinename.local to replace localhost
            //if post or get request raised ,  there's no response.
            host: 'localhost',
            port: 3001 
         });
    
          let config = {
              appTitle: "hapi-demo-service",
              version: '1.0.0',
              authStrategy: false ,
              mongo: {
                URI: 'mongodb://localhost/hapi-demo-service'
              }
          }; 
     
         config.embedAssociations = false;
    
          await server.register({
            plugin: RestHapi,
            options: {
              mongoose,
              config
            }
          });
    
          await server.start();
    
          console.log("Server ready", server.info);
    
          return server;
        } catch (err) {
          console.log("Error starting server:", err);
        }
      }
    
      module.exports = api();
    
    1. 生成model类。 VS code 打开终端。输入 mkdir models, 然后再输入 touch models\user.model.js , 此时会生成 user model。 注意目录名称必须是 models , 文件名称需遵循格式 {model name}.model.js.
      将以下代码拷贝到 user.model.js
    module.exports = function (mongoose) {
      let modelName = "user";
      let Types = mongoose.Schema.Types;
      let Schema = new mongoose.Schema({
        email: {
          type: Types.String,
          required: true,
          unique: true
        },
        password: {
          type: Types.String,
          required: true,
          exclude: true,
          allowOnUpdate: false
        }
      });
      
      Schema.statics = {
        collectionName: modelName,
        routeOptions: {}
      };
      
      return Schema;
    };
    
    1. 好,大功告成。可以运行程序了。终端输入 node index.js 。 当然,也可以使用 npm start来运行。 将 "start": "node index.js" 添加到package.json的scripts 节点中。
      以下是更新后package.json的 scripts 节点
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "node index.js"
      },
    

    运行成功界面如下

    C:\Work\Ionic\hapi-demo-service>node index.js  。
    以下是运行界面
    [14:29:03.251] 16856 LOG      api/mongoose-init — Connecting to Database...:
    [14:29:03.260] 16856 LOG      api/mongoose-init —      URI: `mongodb://localhost/hapi-demo-service`
    [14:29:03.277] 16856 LOG      api/mongoose-init — mongoose connected
    [14:29:03.278] 16856 LOG      api — Initializing Server...
    [14:29:03.367] 16856 INFO     api/register-hapi-swagger — hapi-swagger plugin registered
    [14:29:03.367] 16856 INFO     api/register-MrHorse — MrHorse plugin registered
    Server ready { created: 1530253743241,
      started: 1530253743467,
      host: 'CNSHAEL3Z5Z9H2',
      port: 3001,
      protocol: 'http',
      ...
      address: '0.0.0.0' }
    
    1. 浏览器中输入 : http://localhost:3001 。使用rest-hapi框架的好处是: 会自动生成CRUD的endpoints.
      测试api方法,这里推荐使用postman. 当然,在浏览器中也是可以测试的。
    DELETE /user        Delete multiple users
    POST /user          Create one or more new users
    GET /user           Get a list of users
    DELETE /user/{_id}  Delete a user
    GET /user/{_id}     Get a specific user
    PUT /user/{_id}     Update a user
    

    运行界面截图:


    image.png

    创建一个新的User


    image.png

    使用robot 3T 在 mongo DB 中查看结果,


    image.png

    最后,附上源代码链接 : https://github.com/amincai/hapi-demo-service
    下载到本机后,终端运行 npm i

    行文仓促,难免有所错漏或失误,欢迎批评指正。

    @caiyaming

    相关文章

      网友评论

        本文标题:ionic 后台Api服务, 使用rest-hapi , nod

        本文链接:https://www.haomeiwen.com/subject/grhayftx.html