loopback 远程方法不接受参数或报错

loopback remote method does not accept parameter or give error

我已经使用

生成了远程方法

slc loopback:remote-method

我试图从资源管理器访问此方法,它给出状态 400 和消息 "phoneNumber is a required arg"

当我尝试使用 postman 时,它给出了状态 500 和消息 Internal sever error。我尝试将 post 数据作为表单、x-www-form-urlencoded 编码和行发送,结果相同。

服务器端错误:

Unhandled error for request POST /otp/getOTP: TypeError: Cannot read property 'modelName' of null
at convertToBasicRemotingType (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/strong-remoting/lib/shared-method.js:390:16)
at /Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/strong-remoting/lib/shared-method.js:544:20
at Array.filter (native)
at Function.SharedMethod.toResult (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/strong-remoting/lib/shared-method.js:534:21)
at callback (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/strong-remoting/lib/shared-method.js:249:31)
at Function.Onetimepassword.getOTP (/Users/manish/Documents/workspace-node/carbuk-services/common/models/one-time-password.js:14:4)
at SharedMethod.invoke (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/strong-remoting/lib/shared-method.js:263:25)
at HttpContext.invoke (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/strong-remoting/lib/http-context.js:387:12)
at phaseInvoke (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/strong-remoting/lib/remote-objects.js:644:9)
at runHandler (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/loopback-phase/lib/phase.js:135:5)
at iterate (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/async/lib/async.js:146:13)
at Object.async.eachSeries (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/async/lib/async.js:162:9)
at runHandlers (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/loopback-phase/lib/phase.js:144:13)
at iterate (/Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/async/lib/async.js:146:13)
at /Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/async/lib/async.js:157:25
at /Users/manish/Documents/workspace-node/carbuk-services/node_modules/loopback/node_modules/async/lib/async.js:154:25

型号json看起来像这样

{   
    "name": "OneTimePassword",   
    "plural": "otp",   
    "base": "PersistedModel",   
    "idInjection": true,   
    "options": {
       "validateUpsert": true
    },   
    "properties": {
       "phoneNumber": {
          "type": "number",
          "required": true
       },
    "otpNumber": {
      "type": "number",
      "required": true
    },
    "resendCounter": {
      "type": "number",
      "default": "0"
    },
    "createdDate": {
      "type": "date"
    }   },   "validations": [],   "relations": {},   "acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW",
      "property": "deleteById"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW",
      "property": "getOTP"
    }   ],   "methods": {
    "getOTP": {
      "accepts": [
        {
          "arg": "phoneNumber",
          "type": "number",
          "required": true,
          "description": "phone number",
          "http": {
            "source": "form"
          }
        }
      ],
      "returns": [
        {
          "arg": "oneTimePassword",
          "type": null,
          "root": true,
          "description": "otp"
        }
      ],
      "description": "generate otp and send sms",
      "http": [
        {
          "path": "/getOTP",
          "verb": "post"
        }
      ]
    }   } }

模型 js:

    module.exports = function(Onetimepassword) {
    /**
     * generate otp and send sms
     * @param {number} phoneNumber phone number
     * @param {Function(Error, )} callback
     */
    Onetimepassword.getOTP = function(phoneNumber, callback) {
      var oneTimePassword = {};
      oneTimePassword.phoneNumber = phoneNumber;
      // TODO
      // logic will come here
      // 
      callback(null, oneTimePassword);
    };
   };

我是不是漏掉了什么?

你打错了。

oneTimePassword.phoneNumber = phoneNumber; 你需要设置为 optNumber

我找到了解决方案。

In model.json, Remote method's return type is null. I changed this to object type "OneTimePassword"

但我仍然无法从资源管理器中调用远程方法。有一个错误 issue#440

使用邮递员,请求工作正常