Проблемы совместной работы Angular 7, Angular-Material, Node, Express, Sequelize-Typescript и Postgres - PullRequest
0 голосов
/ 20 мая 2019

Я настроил проект, используя Angular 7 (CLI 7.3.9) и Angular Material для внешнего интерфейса, NodeJS (10.14.1), Express (4.16.0) и Sequelize-Typescript (1.0.0-beta.3).База данных Postgres (4.6).Я создал бэкэнд для доступа к базе данных с помощью Node и Express, и это работает (протестировано с Postman).Я также настроил модель с помощью Sequelize-Typescript.Внешний интерфейс с Angular 7 и Material также работает сам по себе.Но у меня есть проблемы, заставляющие все это работать вместе, и похоже, что это вызвано целью компиляции.

Я пробовал разные настройки для цели в tsconfig.json: "es5" и "es6".Но когда я использую es5, мой сервер разрывается при запросе данных через Sequelize от Postgres (см. Ошибки ниже).Когда я устанавливаю цель компиляции равную es6, мои входные разрывы.

tsconfig.json:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "noUnusedLocals": false,
    "outDir": "./dist",
    "pretty": true,
    "sourceMap": true,
    "strictNullChecks": true,
    "strictPropertyInitialization": false,
    "target": "es6",
    "types": [
      "node"
    ],
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  },
  "include": [
    "src/**/*.ts",
    "index.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

Когда цель запрашивает данные "es5" при запросе данных из базы данных, я получаю этоошибка на бэкэнде:

TypeError: Class constructor Model cannot be invoked without 'new'
    at new Company (C:\Users\snleka\My Projects\hpms-ng2\src\app\server\models\Company.ts:8:42)
    at Function.build (C:\Users\snleka\My Projects\hpms-ng2\node_modules\sequelize\lib\model.js:2156:12)
    at Function.Model.(anonymous function) (C:\Users\snleka\My Projects\hpms-ng2\node_modules\sequelize-typescript\dist\model\model\model.js:116:28)

Если для цели задано значение "es6", то передний конец обрывается с этим сообщением об ошибке:

core.js:19866 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'nativeElement' of undefined

Как я могу сделатьфоновая работа вместе?

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

В tsconfig.json используйте файл:

"target": "es5",

и создайте новый файл в каталоге вашего проекта с именем .jshintrc и напишите в нем следующее:

 { "esversion": 6 }

Это сработалодля меня.

0 голосов
/ 20 мая 2019

Узел опирается на es6, однако поддержка браузером для es6 варьируется .... У вас есть два варианта, первый, который я бы порекомендовал, это иметь отдельные tsConfigs для вашего внешнего и внутреннего конца.Если вы этого не сделаете, другим вариантом будет оставить для вашего tsConfig значение es6, но добавить babel-загрузчик в конфигурацию вашего веб-пакета, чтобы весь ваш интерфейсный код, однажды переданный с помощью машинописи в es6, затем был бы передан.от babel до es5.Я настоятельно рекомендую использовать отдельные tsConfigs, так как webpack будет использовать tsConfig для внешнего интерфейса, но задний конец будет передаваться отдельно.

...