Добавлен модуль управления CORS-заголовками, обновлена версия LODASH

This commit is contained in:
Mikhail Chechnev 2020-02-02 19:03:30 +03:00
parent 506cce697b
commit 7c8cca6084
3 changed files with 64 additions and 46 deletions

View File

@ -10,6 +10,7 @@
const _ = require("lodash"); //Работа с массивами и коллекциями const _ = require("lodash"); //Работа с массивами и коллекциями
const EventEmitter = require("events"); //Обработчик пользовательских событий const EventEmitter = require("events"); //Обработчик пользовательских событий
const express = require("express"); //WEB-сервер Express const express = require("express"); //WEB-сервер Express
const cors = require("cors"); //Управление заголовками безопасности для WEB-сервера Express
const bodyParser = require("body-parser"); //Модуль для Express (разбор тела входящего запроса) const bodyParser = require("body-parser"); //Модуль для Express (разбор тела входящего запроса)
const { ServerError } = require("./server_errors"); //Типовая ошибка const { ServerError } = require("./server_errors"); //Типовая ошибка
const { const {
@ -71,6 +72,8 @@ class InQueue extends EventEmitter {
this.notifier = prms.notifier; this.notifier = prms.notifier;
//WEB-приложение //WEB-приложение
this.webApp = express(); this.webApp = express();
this.webApp.use(cors());
this.webApp.options("*", cors());
//WEB-сервер //WEB-сервер
this.srv = null; this.srv = null;
} else { } else {
@ -309,9 +312,7 @@ class InQueue extends EventEmitter {
await this.logger.info(`Входящее сообщение ${q.nId} успешно отработано`, { nQueueId: q.nId }); await this.logger.info(`Входящее сообщение ${q.nId} успешно отработано`, { nQueueId: q.nId });
} catch (e) { } catch (e) {
//Тема и текст уведомления об ошибке //Тема и текст уведомления об ошибке
let sSubject = `Ошибка обработки входящего сообщения сервером приложений для функции "${ let sSubject = `Ошибка обработки входящего сообщения сервером приложений для функции "${prms.function.sCode}" сервиса "${prms.service.sCode}"`;
prms.function.sCode
}" сервиса "${prms.service.sCode}"`;
let sMessage = makeErrorText(e); let sMessage = makeErrorText(e);
//Если сообщение очереди успели создать //Если сообщение очереди успели создать
if (q) { if (q) {
@ -328,9 +329,7 @@ class InQueue extends EventEmitter {
{ nQueueId: q.nId } { nQueueId: q.nId }
); );
//Добавим чуть больше информации в тему сообщения //Добавим чуть больше информации в тему сообщения
sSubject = `Ошибка обработки входящего сообщения ${q.nId} сервером приложений для функции "${ sSubject = `Ошибка обработки входящего сообщения ${q.nId} сервером приложений для функции "${prms.function.sCode}" сервиса "${prms.service.sCode}"`;
prms.function.sCode
}" сервиса "${prms.service.sCode}"`;
} else { } else {
//Ограничимся общей ошибкой //Ограничимся общей ошибкой
await this.logger.error(sMessage, { await this.logger.error(sMessage, {
@ -375,20 +374,23 @@ class InQueue extends EventEmitter {
//Для любых запросов к корневому адресу сервиса - ответ о том, что это за сервис, и что он работает //Для любых запросов к корневому адресу сервиса - ответ о том, что это за сервис, и что он работает
this.webApp.all(srvs.sSrvRoot, (req, res) => { this.webApp.all(srvs.sSrvRoot, (req, res) => {
res.status(200).send( res.status(200).send(
`<html><body><center><br><h1>Сервер приложений ПП Парус 8</h1><h3>Сервис: ${ `<html><body><center><br><h1>Сервер приложений ПП Парус 8</h1><h3>Сервис: ${srvs.sName}</h3></center></body></html>`
srvs.sName
}</h3></center></body></html>`
); );
}); });
//Для всех статических функций сервиса... //Для всех статических функций сервиса...
_.forEach(_.filter(srvs.functions, fn => fn.sFnURL.startsWith("@")), fn => { _.forEach(
_.filter(srvs.functions, fn => fn.sFnURL.startsWith("@")),
fn => {
this.webApp.use( this.webApp.use(
buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL.substr(1) }), buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL.substr(1) }),
express.static(`${this.inComing.sStaticDir}/${fn.sFnURL.substr(1)}`) express.static(`${this.inComing.sStaticDir}/${fn.sFnURL.substr(1)}`)
); );
}); }
);
//Для всех функций сервиса (кроме статических)... //Для всех функций сервиса (кроме статических)...
_.forEach(_.filter(srvs.functions, fn => !fn.sFnURL.startsWith("@")), fn => { _.forEach(
_.filter(srvs.functions, fn => !fn.sFnURL.startsWith("@")),
fn => {
//...собственный обработчик, в зависимости от указанного способа передачи параметров //...собственный обработчик, в зависимости от указанного способа передачи параметров
this.webApp[fn.nFnPrmsType == objServiceFnSchema.NFN_PRMS_TYPE_POST ? "post" : "get"]( this.webApp[fn.nFnPrmsType == objServiceFnSchema.NFN_PRMS_TYPE_POST ? "post" : "get"](
buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }), buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }),
@ -420,7 +422,8 @@ class InQueue extends EventEmitter {
res.status(500).send(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message))); res.status(500).send(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message)));
} }
); );
}); }
);
}); });
//Запросы на адреса, не входящие в состав объявленных сервисов - 404 NOT FOUND //Запросы на адреса, не входящие в состав объявленных сервисов - 404 NOT FOUND
this.webApp.use("*", (req, res) => { this.webApp.use("*", (req, res) => {

20
package-lock.json generated
View File

@ -135,6 +135,15 @@
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" "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": { "dashdash": {
"version": "1.14.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@ -407,9 +416,9 @@
} }
}, },
"lodash": { "lodash": {
"version": "4.17.11", "version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
}, },
"media-typer": { "media-typer": {
"version": "0.3.0", "version": "0.3.0",
@ -469,6 +478,11 @@
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" "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": { "on-finished": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",

View File

@ -19,9 +19,10 @@
"homepage": "https://github.com/CITKParus/ExchangeService#readme", "homepage": "https://github.com/CITKParus/ExchangeService#readme",
"dependencies": { "dependencies": {
"body-parser": "^1.18.3", "body-parser": "^1.18.3",
"cors": "^2.8.5",
"express": "^4.16.4", "express": "^4.16.4",
"js2xmlparser": "^3.0.0", "js2xmlparser": "^3.0.0",
"lodash": "^4.17.11", "lodash": "^4.17.15",
"module-alias": "^2.1.0", "module-alias": "^2.1.0",
"nodemailer": "^4.7.0", "nodemailer": "^4.7.0",
"oracledb": "^2.3.0", "oracledb": "^2.3.0",