zoukankan      html  css  js  c++  java
  • Falcor 学习一基本使用

    falcor 是netflix 公司为了解决自己api数据查询所开发的查询框架,很不错(尽管netflix 也在用graphql )以下是falcor 的
    一个简单使用,基于express 框架,使用服务器端提供model.json

    一张参考图

    server 端代码

    • 初始化项目
     
    yarn init -y
    • 添加依赖
    yarn add cors express falcor falcor-express falcor-router
    • package.json 文件
    {
      "name": "netflix-falcor",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {
        "cors": "^2.8.5",
        "express": "^4.17.1",
        "falcor": "^2.1.0",
        "falcor-express": "^0.1.4",
        "falcor-router": "^0.8.3"
      },
      "scripts": {
        "a": "node index"
      }
    }
    • index.js
    // index.js
    const falcorExpress = require('falcor-express');
    const Router = require('falcor-router');
    const cors = require('cors')
    const express = require('express');
    const app = express();
    app.use(cors({
        origin: function (origin, callback) {
            callback(null,true)
        },
        credentials:true
    }))
    app.use('/model.json', falcorExpress.dataSourceRoute(function (req, res) {
      // create a Virtual JSON resource with single key ('greeting')
      return new Router([
        {
          // match a request for the key 'greeting'
          route: 'greeting',
          // respond with a PathValue with the value of 'Hello World.'
          get: () => ({path: ['greeting'], value: 'Hello World'})
        }
      ],
      {
        // match a request for the key 'greeting'
        route: 'username',
        // respond with a PathValue with the value of 'Hello World.'
        set: () => ({path: ['username'], value: 'dalong'})
      });
    }));
    // serve static files from current directory
    app.use(express.static(__dirname + '/'));
    app.listen(3000);
     
    • 简单说明
      使用falcor-router 提供model.json 服务,为了方便使用基于http 的访问,添加了cors
      使用了cors 包,提供了一个简单的get 服务 greeting

    web 客户端

    使用简单的html

    • index.html
    <!-- index.html -->
    <html>
      <head>
        <!-- Do _not_ rely on this URL in production. Use only during development. -->
        <script src="./falcor.browser.min.js"></script>
        <!-- For production use. -->
        <!-- <script src="https://cdn.jsdelivr.net/falcor/{VERSION}/falcor.browser.min.js"></script> -->
        <script>
          var model = falcor({source: new falcor.HttpDataSource('http://localhost:3000/model.json') });
          // retrieve the "greeting" key from the root of the Virtual JSON resource
          model.
            get('greeting').
            then(function(response) {
              document.write(response.json.greeting);
            });
        </script>
      </head>
      <body>
      </body>
    </html>

    docker 集成

    • server dockerfile
    FROM node:alpine
    LABEL AUTHOR="dalongrong"
    LABEL EMAIL="1141591465@qq.com"
    WORKDIR /app
    COPY index.js /app/index.js
    COPY package.json /app/package.json
    COPY yarn.lock /app/yarn.lock
    RUN yarn
    EXPOSE 3000
    ENTRYPOINT [ "yarn","a" ]
    • web dockerfile
      基于nginx
    FROM openresty/openresty:1.15.8.2-1-alpine
    COPY index.html /app/
    COPY falcor.browser.min.js /app/
    EXPOSE 8080
    COPY nginx.conf /usr/local/openresty/nginx/conf/nginx.conf
    • docker-compose 文件
    version: "3"
    services:
      app:
        build: ./
        ports:
        - "3000:3000"
      web:
        build: 
          context: ./
          dockerfile: Dockerfile-web
        ports:
        - "8080:8080"

    启动&&效果

    • 启动
    docker-compose up -d
    • 效果

    说明

    falcor 提供了一套自己json graph 同时包含了一套很方便的查询语言,后续会在写相关的使用

    参考资料

    https://netflix.github.io/falcor/

  • 相关阅读:
    IDEA debug漏洞第一篇(weblogic,cve-2017-10271)
    IDEA+docker,进行远程漏洞调试(weblogic)
    2019-2020-1 20199326《Linux内核原理与分析》第四周作业
    2019-2020-1 20199326《Linux内核原理与分析》第三周作业
    2019-2020-1 20199326《Linux内核原理与分析》第二周作业
    2019-2020-1 20199326《Linux内核原理与分析》第一周作业
    DEV插件下的控件Grid和Gridlookupedit控件的结合使用
    foreach循环的简单写法
    dev设置子窗体的初始位置,grid控件表头的属性设置
    C#中,用户控件UserControl里面用Panl加载UserControl,并实现利用委托互相传值
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/11494758.html
Copyright © 2011-2022 走看看