Loobback4 принадлежит, отношение не работает с запросом REST? - PullRequest
0 голосов
/ 15 января 2020

Я получаю сообщение об ошибке:

Unhandled error in GET /message-templates?filter[include]=groups: 500 TypeError: include.filter is not a function
    at Object.includeRelatedModels (/.../node_modules/@loopback/repository/src/relations/relation.helpers.ts:84:37)
    at MessageRepository.includeRelatedModels (/.../node_modules/@loopback/repository/src/repositories/legacy-juggler-bridge.ts:524:12)

РЕДАКТИРОВАТЬ: это проблема версии? https://github.com/strongloop/loopback-next/issues/1352, кажется, недавний поток.

У меня есть определенный класс Loopback, который использовал lb4 relation без проблем. Проверка идентификатора работает, и все выглядит нормально, за исключением случаев, когда я пытаюсь включить данные в запрос REST.

В основном: http://localhost:3001/message-templates?filter[include]=groups.

http://localhost:3001/message-templates работает просто отлично. Как мне разрешить доступ к реляционным данным?

В основном, если у меня есть модель, возвращаемая с сервера, которая представлена ​​объектом JSON и имеет свойство: groupId: 3, я хочу свойство вместо этого значение будет group: {...groupData}. В документации просто говорится, как создать связь между моделями. Но, похоже, ничего не получится получить доступ к реляционным свойствам.

{
    "name": "",
    "version": "1.0.0",
    "description": "",
    "keywords": [
        "loopback-application",
        "loopback"
    ],
    "main": "index.js",
    "engines": {
        "node": ">=8.9"
    },
    "scripts": {
        "build": "lb-tsc",
        "build:watch": "lb-tsc --watch",
        "clean": "lb-clean dist *.tsbuildinfo",
        "lint": "npm run prettier:check && npm run eslint",
        "lint:fix": "npm run eslint:fix && npm run prettier:fix",
        "prettier:cli": "lb-prettier \"**/*.ts\" \"**/*.js\"",
        "prettier:check": "npm run prettier:cli -- -l",
        "prettier:fix": "npm run prettier:cli -- --write",
        "eslint": "lb-eslint --report-unused-disable-directives .",
        "eslint:fix": "npm run eslint -- --fix",
        "pretest": "npm run clean && npm run build",
        "test": "NODE_ENV=testing lb-mocha --allow-console-logs \"dist/tests\"",
        "test-single": "NODE_ENV=testing lb-mocha --allow-console-logs $1",
        "posttest": "npm run lint",
        "test:dev": "lb-mocha --allow-console-logs dist/tests/**/*.js && npm run posttest",
        "migrate": "node ./dist/migrate",
        "prestart": "npm run build",
        "start:watch": "tsc-watch --target es2017 --outDir ./dist --onSuccess \"node .\"",
        "start": "node -r source-map-support/register .",
        "prepublishOnly": "npm run test",
        "start-prod": "pm2-runtime start ecosystem.config.js --env production",
        "stop-prod": "pm2-runtime stop ecosystem.config.js --env production"
    },
    "repository": {
        "type": "git"
    },
    "author": "",
    "license": "",
    "files": [
        "README.md",
        "index.js",
        "index.d.ts",
        "dist",
        "src",
        "!*/tests"
    ],
    "dependencies": {
        "@loopback/authentication": "^2.1.11",
        "@loopback/authentication-passport": "^0.1.0",
        "@loopback/boot": "^1.5.3",
        "@loopback/build": "^2.1.0",
        "@loopback/cli": "^1.21.4",
        "@loopback/context": "^1.21.4",
        "@loopback/core": "^1.9.3",
        "@loopback/openapi-v3": "^1.9.4",
        "@loopback/repository": "^1.12.0",
        "@loopback/rest": "^1.17.0",
        "@loopback/rest-explorer": "^1.3.4",
        "@loopback/service-proxy": "^1.3.3",
        "aws-sdk": "^2.531.0",
        "bcryptjs": "^2.4.3",
        "cryptr": "^4.0.2",
        "firebase-admin": "^8.6.0",
        "google-libphonenumber": "^3.2.6",
        "isemail": "^3.2.0",
        "jsonwebtoken": "^8.5.1",
        "lodash": "^4.17.15",
        "loopback-connector-mysql": "^5.4.2",
        "mkdirp": "^0.5.1",
        "moment": "^2.24.0",
        "moment-timezone": "^0.5.27",
        "multer": "^1.4.2",
        "node-cron": "^2.0.3",
        "passport": "^0.4.0",
        "passport-jwt": "^4.0.0",
        "pm2": "^4.1.2",
        "twilio": "^3.35.1",
        "uuid": "^3.3.3",
        "winston": "^3.2.1",
        "winston-papertrail": "^1.0.5"
    },
    "devDependencies": {
        "@loopback/eslint-config": "^4.0.1",
        "@loopback/testlab": "^1.7.4",
        "@types/aws-sdk": "^2.7.0",
        "@types/bcryptjs": "^2.4.2",
        "@types/cryptr": "^4.0.0",
        "@types/google-libphonenumber": "^7.4.17",
        "@types/lodash": "^4.14.138",
        "@types/mkdirp": "^0.5.2",
        "@types/moment": "^2.13.0",
        "@types/moment-timezone": "^0.5.12",
        "@types/multer": "^1.3.9",
        "@types/node": "^10.14.15",
        "@types/node-cron": "^2.0.2",
        "@types/passport": "^1.0.1",
        "@types/passport-jwt": "^3.0.1",
        "@types/twilio": "0.0.10",
        "@types/uuid": "^3.4.5",
        "@typescript-eslint/eslint-plugin": "^2.0.0",
        "@typescript-eslint/parser": "^2.0.0",
        "eslint": "^6.2.0",
        "eslint-config-prettier": "^6.1.0",
        "eslint-plugin-eslint-plugin": "^2.1.0",
        "eslint-plugin-mocha": "^6.0.0",
        "nodemon": "^2.0.2",
        "source-map-support": "^0.5.13",
        "typescript": "~3.5.3"
    }
}
host@host:~/dir$ lb4 --version
@loopback/cli version: 1.21.4

@loopback/* dependencies:
  - @loopback/authentication: ^2.1.11
  - @loopback/boot: ^1.5.3
  - @loopback/build: ^2.0.8
  - @loopback/context: ^1.21.4
  - @loopback/core: ^1.9.3
  - @loopback/metadata: ^1.2.10
  - @loopback/openapi-spec-builder: ^1.2.10
  - @loopback/openapi-v3: ^1.9.4
  - @loopback/repository-json-schema: ^1.9.5
  - @loopback/repository: ^1.12.0
  - @loopback/rest: ^1.17.0
  - @loopback/testlab: ^1.7.4
  - @loopback/docs: ^1.29.3
  - @loopback/example-hello-world: ^1.2.11
  - @loopback/example-log-extension: ^1.2.11
  - @loopback/example-rpc-server: ^1.2.11
  - @loopback/example-todo: ^1.7.4
  - @loopback/example-soap-calculator: ^1.6.12
  - @loopback/service-proxy: ^1.3.3
  - @loopback/http-caching-proxy: ^1.1.10
  - @loopback/http-server: ^1.4.10
  - @loopback/example-todo-list: ^1.9.4
  - @loopback/dist-util: ^0.4.0
  - @loopback/rest-explorer: ^1.3.4
  - @loopback/eslint-config: ^4.0.1
  - @loopback/example-express-composition: ^1.5.4
  - @loopback/example-greeter-extension: ^1.3.11
  - @loopback/booter-lb3app: ^1.2.11
  - @loopback/example-lb3-application: ^1.1.11
  - @loopback/example-greeting-app: ^1.1.11
  - @loopback/example-context: ^1.2.11
  - @loopback/repository-tests: ^0.4.2
  - @loopback/extension-health: ^0.2.3
  - @loopback/authorization: ^0.2.0

1 Ответ

0 голосов
/ 25 февраля 2020

Я сталкивался с подобным сообщением. Проблема в том, что фильтр не «включает», а «включает». Так что это должен быть фильтр [include s ] НЕ фильтр [include].

Например, ваш вызов может выглядеть следующим образом:

GET / message- шаблоны? фильтр [включает] = [{"отношение": "группы"}]

...