微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SAPUI5 JSON REST API非 oData模拟服务器

如何解决SAPUI5 JSON REST API非 oData模拟服务器

如何将模拟服务器用于 JSON REST API 而不是用于 oData 服务? 我想模拟 http://localhost:8080/api/v1/configs 以获取所有配置的 JSON 列表,即使我没有后端连接并且我在模拟模式下运行应用程序。

以下不起作用,它还返回真实数据而不是模拟数据。

mockserver.js

sap.ui.define([
  "sap/ui/core/util/MockServer","sap/base/util/UriParameters"
],function (MockServer,UriParameters) {
  "use strict";

  var oTokenRequest = {
    method: "GET",path: new RegExp("/actuator/info"),response: function (oXhr,sNodeId) {
      jQuery.sap.log.debug("Incoming request for X-CSRF Token");
      oXhr.respondJSON(200,{
        "X-Csrf-Token": "myFaketoken"
      },{});
    }
  };

  var oMockServer;

  return {

    init: function () {

      var oUriParameters = new UriParameters(window.location.href);

      // configure mock server with a delay
      MockServer.config({
        autoRespond: true,autoRespondAfter: oUriParameters.get("serverDelay") || 500
      });

      var oAllConfigurations = {
        method: "GET",path: "/configs",// or "new RegExp(".*?")" for everything after v1/?
        response: function (oXhr,sUrlParams) {
          oXhr.respondJSON(200,{},JSON.stringify({
            "uuid": "50df30x9-762b-341c-9881-7315l242b6c5","name": "Config1","description": "Mapping for component1","fiLeversion": 3,"createdAt": 1581517043000,"updatedAt": 1589039157000
          },{
            "uuid": "4f68da04-28a2-4a4e-947k-6d7be70cr03k","name": "MOCKSERVER-Config2","description": "Mapping for component2","fiLeversion": 12,"createdAt": 1553685823000,"updatedAt": 1589363607000
          },{
            "uuid": "6g6chg1-23a2-4a3o-332a-2a6be08ca02f","name": "Config3","description": "Mapping for component3","fiLeversion": 1,"createdAt": 1596119686000,"updatedAt": 1596119686000
          }));
        }
      };

      var aRequests = [oTokenRequest];
      aRequests = aRequests.concat(oAllConfigurations);

      // create
      this.oMockServer = new MockServer({
        rootUri: "http://localhost:8080/api/v1",requests: [oAllConfigurations]
      });


      // start
      this.oMockServer.start();
    }
  };

});

data-sap-ui-oninitmockServer.html 导致 initMockServer.js

initMockServer.js

sap.ui.define([
    "../localService/mockserver"
],function (mockserver) {
    "use strict";

    // initialize the mock server
    mockserver.init();

    // initialize the embedded component on the HTML page
    sap.ui.require(["sap/ui/core/ComponentSupport"]);
});

Main.controller.js

//...

 _getConfigList: function () {
      var oModelConfigList = new JSONModel();
      this.request = new BaseRequests();
        return fetch("http://localhost:8080/api/v1/configs")
          .then((response) => {
            if (response.ok) {
              return response.json();
            } else {
              Messagetoast.show(response.statusText);
              return null;
            }
          }).then(json => {
          if (json) {
            oModelConfigList.setData(json);
            this.getView().setModel(oModelConfigList,"ConfigList");
          }
        });
      },//...

解决方法

UI5-Mockserver 仅用于 UI5 V2-Model 实现。因此,您需要构建自己的。

尽可能简单;我建议将所有内容都打包在一个委托中,并在运行时使用全局标志来切换模拟/真实请求。

//
// your delegate
//
sap.ui.define([
    "sap/ui/base/Object"
],function (BaseObject) {
    "use strict";

    const mockData = {
        "uuid": "50df30x9-762b-341c-9881-7315l242b6c5","name": "Config1","description": "Mapping for component1","fileVersion": 3,"createdAt": 1581517043000,"updatedAt": 1589039157000
      },{
        "uuid": "4f68da04-28a2-4a4e-947k-6d7be70cr03k","name": "MOCKSERVER-Config2","description": "Mapping for component2","fileVersion": 12,"createdAt": 1553685823000,"updatedAt": 1589363607000
      },{
        "uuid": "6g6chg1-23a2-4a3o-332a-2a6be08ca02f","name": "Config3","description": "Mapping for component3","fileVersion": 1,"createdAt": 1596119686000,"updatedAt": 1596119686000
      }

    return BaseObject.extend("my.namespace.delegate.config",{

        read: function(){
           if(!window.MY_NAME_SPACE_MOCK){
            return fetch("api/v1/configs")
            .then((response) => {
              if (response.ok) {
                return response.json();
              } else {
                //MessageToast.show(response.statusText);
                return null;
              }
            })
           }else{
            return new Promise((resolve,reject) => {
                let wait = setTimeout(() => {
                  clearTimout(wait);
                  resolve(mockData);
                },2000)
              })
           }
        },});
});

// usage
sap.ui.define([
    "my/namespace/delegate/config"
],function (Config) {
    onInit: function() {
            this._config = new Config();
            this._config.read()
            .then((data)=>{
              console.log("data can be mock or real depending on MY_NAME_SPACE_MOCK")})
    },})

//
// switch on/off mocking anywhere 
//
window.MY_NAME_SPACE_MOCK = true;
delete window.MY_NAME_SPACE_MOCK

仅供参考:domain("localhost") 不是普通 AJAX 请求的一部分。一旦部署;这将不再起作用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?