diff --git a/core/in_queue.js b/core/in_queue.js
index 6adfe8a..2649818 100644
--- a/core/in_queue.js
+++ b/core/in_queue.js
@@ -10,6 +10,7 @@
const _ = require("lodash"); //Работа с массивами и коллекциями
const EventEmitter = require("events"); //Обработчик пользовательских событий
const express = require("express"); //WEB-сервер Express
+const cors = require("cors"); //Управление заголовками безопасности для WEB-сервера Express
const bodyParser = require("body-parser"); //Модуль для Express (разбор тела входящего запроса)
const { ServerError } = require("./server_errors"); //Типовая ошибка
const {
@@ -71,6 +72,8 @@ class InQueue extends EventEmitter {
this.notifier = prms.notifier;
//WEB-приложение
this.webApp = express();
+ this.webApp.use(cors());
+ this.webApp.options("*", cors());
//WEB-сервер
this.srv = null;
} else {
@@ -309,9 +312,7 @@ class InQueue extends EventEmitter {
await this.logger.info(`Входящее сообщение ${q.nId} успешно отработано`, { nQueueId: q.nId });
} catch (e) {
//Тема и текст уведомления об ошибке
- let sSubject = `Ошибка обработки входящего сообщения сервером приложений для функции "${
- prms.function.sCode
- }" сервиса "${prms.service.sCode}"`;
+ let sSubject = `Ошибка обработки входящего сообщения сервером приложений для функции "${prms.function.sCode}" сервиса "${prms.service.sCode}"`;
let sMessage = makeErrorText(e);
//Если сообщение очереди успели создать
if (q) {
@@ -328,9 +329,7 @@ class InQueue extends EventEmitter {
{ nQueueId: q.nId }
);
//Добавим чуть больше информации в тему сообщения
- sSubject = `Ошибка обработки входящего сообщения ${q.nId} сервером приложений для функции "${
- prms.function.sCode
- }" сервиса "${prms.service.sCode}"`;
+ sSubject = `Ошибка обработки входящего сообщения ${q.nId} сервером приложений для функции "${prms.function.sCode}" сервиса "${prms.service.sCode}"`;
} else {
//Ограничимся общей ошибкой
await this.logger.error(sMessage, {
@@ -375,52 +374,56 @@ class InQueue extends EventEmitter {
//Для любых запросов к корневому адресу сервиса - ответ о том, что это за сервис, и что он работает
this.webApp.all(srvs.sSrvRoot, (req, res) => {
res.status(200).send(
- `
Сервер приложений ПП Парус 8
Сервис: ${
- srvs.sName
- }
`
+ `
Сервер приложений ПП Парус 8
Сервис: ${srvs.sName}
`
);
});
//Для всех статических функций сервиса...
- _.forEach(_.filter(srvs.functions, fn => fn.sFnURL.startsWith("@")), fn => {
- this.webApp.use(
- buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL.substr(1) }),
- express.static(`${this.inComing.sStaticDir}/${fn.sFnURL.substr(1)}`)
- );
- });
+ _.forEach(
+ _.filter(srvs.functions, fn => fn.sFnURL.startsWith("@")),
+ fn => {
+ this.webApp.use(
+ buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL.substr(1) }),
+ express.static(`${this.inComing.sStaticDir}/${fn.sFnURL.substr(1)}`)
+ );
+ }
+ );
//Для всех функций сервиса (кроме статических)...
- _.forEach(_.filter(srvs.functions, fn => !fn.sFnURL.startsWith("@")), fn => {
- //...собственный обработчик, в зависимости от указанного способа передачи параметров
- this.webApp[fn.nFnPrmsType == objServiceFnSchema.NFN_PRMS_TYPE_POST ? "post" : "get"](
- buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }),
- async (req, res) => {
- try {
- //Вызываем обработчик
- await this.processMessage({ req, res, service: srvs, function: fn });
- } catch (e) {
+ _.forEach(
+ _.filter(srvs.functions, fn => !fn.sFnURL.startsWith("@")),
+ fn => {
+ //...собственный обработчик, в зависимости от указанного способа передачи параметров
+ this.webApp[fn.nFnPrmsType == objServiceFnSchema.NFN_PRMS_TYPE_POST ? "post" : "get"](
+ buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }),
+ async (req, res) => {
+ try {
+ //Вызываем обработчик
+ await this.processMessage({ req, res, service: srvs, function: fn });
+ } catch (e) {
+ //Протоколируем в журнал работы сервера
+ await this.logger.error(makeErrorText(e), {
+ nServiceId: srvs.nId,
+ nServiceFnId: fn.nId
+ });
+ //Отправим ошибку клиенту
+ res.status(500).send(makeErrorText(e));
+ }
+ }
+ );
+ //...и собственный обработчик ошибок
+ this.webApp.use(
+ buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }),
+ async (err, req, res, next) => {
//Протоколируем в журнал работы сервера
- await this.logger.error(makeErrorText(e), {
+ await this.logger.error(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message)), {
nServiceId: srvs.nId,
nServiceFnId: fn.nId
});
//Отправим ошибку клиенту
- res.status(500).send(makeErrorText(e));
+ res.status(500).send(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message)));
}
- }
- );
- //...и собственный обработчик ошибок
- this.webApp.use(
- buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }),
- async (err, req, res, next) => {
- //Протоколируем в журнал работы сервера
- await this.logger.error(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message)), {
- nServiceId: srvs.nId,
- nServiceFnId: fn.nId
- });
- //Отправим ошибку клиенту
- res.status(500).send(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message)));
- }
- );
- });
+ );
+ }
+ );
});
//Запросы на адреса, не входящие в состав объявленных сервисов - 404 NOT FOUND
this.webApp.use("*", (req, res) => {
diff --git a/package-lock.json b/package-lock.json
index 1e72b74..9c25477 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -135,6 +135,15 @@
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -407,9 +416,9 @@
}
},
"lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"media-typer": {
"version": "0.3.0",
@@ -469,6 +478,11 @@
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
diff --git a/package.json b/package.json
index 8934533..d66dcde 100644
--- a/package.json
+++ b/package.json
@@ -19,9 +19,10 @@
"homepage": "https://github.com/CITKParus/ExchangeService#readme",
"dependencies": {
"body-parser": "^1.18.3",
+ "cors": "^2.8.5",
"express": "^4.16.4",
"js2xmlparser": "^3.0.0",
- "lodash": "^4.17.11",
+ "lodash": "^4.17.15",
"module-alias": "^2.1.0",
"nodemailer": "^4.7.0",
"oracledb": "^2.3.0",