add files into repos

This commit is contained in:
Nikiroy78 2022-10-13 11:42:58 +03:00
parent 67f7ab075a
commit f6ca92bc8e
6 changed files with 96 additions and 27 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
node_modules node_modules
*.npe

View File

@ -2,11 +2,11 @@ const backend = require('./index');
// Создаём класс бэкенда, наследующий класс backend.Main // Создаём класс бэкенда, наследующий класс backend.Main
class Main extends backend.Main { class Main extends backend.Main {
session (params, sessionData) { // Настраиваем сессию (опционально) session (params, sessionData, next) { // Настраиваем сессию (опционально)
sessionData._setValue('example', 1); // Задать значение sessionData._setValue('example', 1); // Задать значение
console.log(sessionData.example); // Получить значение из сессии console.log(sessionData.example); // Получить значение из сессии
sessionData._remove('example'); // Убрать значение sessionData._remove('example'); // Убрать значение
return 1; // Успешно return next(); // Успешно
return 'Example error'; // Пример ошибки return 'Example error'; // Пример ошибки
}; };
@ -22,6 +22,14 @@ class Main extends backend.Main {
code: 400 code: 400
}};*/ }};*/
session (params, sessionData) {
sessionData._setValue('example', 1); // Задать значение
console.log(sessionData.example); // Получить значение из сессии
sessionData._remove('example'); // Убрать значение
return 1; // Успешно
return 'Example error' // Пример ошибки
}
responseHandler (response) { return ({ responseHandler (response) { return ({
mainbody : { response }, mainbody : { response },
headers : { headers : {
@ -38,6 +46,15 @@ class Main extends backend.Main {
var server = new Main( var server = new Main(
false // Отобразить в заголовках информацию о текущем фреймворке false // Отобразить в заголовках информацию о текущем фреймворке
); );
server.setSessionParams( // Зададим необходимые параметры для сессии
{
session_id : {
required : true,
type : backend.types.integer,
values : [1]
}
}
);
server.typeError = 'param {param} must be only {long_type} ({short_type})'; server.typeError = 'param {param} must be only {long_type} ({short_type})';
// Создаём класс группы методов // Создаём класс группы методов
@ -62,7 +79,8 @@ class ExampleMethod extends backend.Method {
text : params.text, text : params.text,
result : this.MainObject.call('sum', { result : this.MainObject.call('sum', {
a : 15, a : 15,
b : 17 b : 17,
session_id : params.session_id
}) })
}; };
throw new backend.ApiError('EXAMPLE_ERROR', new Object()); throw new backend.ApiError('EXAMPLE_ERROR', new Object());

View File

@ -1,4 +1,8 @@
class Group {} class Group {
constructor () {
}
}
module.exports = Group; module.exports = Group;

View File

@ -17,6 +17,13 @@ class Main {
constructor (sendHeaders = true) { constructor (sendHeaders = true) {
this.sendHeaders = sendHeaders; this.sendHeaders = sendHeaders;
this.methods = new Object(); this.methods = new Object();
this.sessionData = new Object();
this.fileUploadConfig = {
limits: { fileSize : 1024 * 1024 * 256 }, // 256 Mb maximum
abortOnLimit: true,
responseOnLimit: '{"error":"FILE_SIZE_LIMIT_HAS_BEEN_REACHED"}'
};
} }
paramsError (required, additional) { paramsError (required, additional) {
@ -46,6 +53,10 @@ class Main {
} }
} }
setSessionParams (sessionParams) {
this.sessionData = sessionParams;
}
session (params, sessionData) { return 1; } session (params, sessionData) { return 1; }
responseHandler (result) { return ({ responseHandler (result) { return ({
@ -65,6 +76,10 @@ class Main {
return this.methods[method].pre_execute(params); return this.methods[method].pre_execute(params);
} }
fileSetting (fileUploadConfig) {
this.fileUploadConfig = fileUploadConfig;
}
router (returnMiddlewareFunction = false, middlewareFunction = (req, res, next) => next(), debug = (text) => console.log(text)) { router (returnMiddlewareFunction = false, middlewareFunction = (req, res, next) => next(), debug = (text) => console.log(text)) {
let router = express.Router(); let router = express.Router();
router.use(require('cookie-parser')()); router.use(require('cookie-parser')());
@ -73,7 +88,9 @@ class Main {
// parse some custom thing into a Buffer // parse some custom thing into a Buffer
router.use(bodyParser.raw({ type: 'application/vnd.custom-type' })) router.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
// parse an HTML body into a string // parse an HTML body into a string
router.use(bodyParser.text({ type: 'text/html' })) router.use(bodyParser.text({ type: 'text/html' }));
// parse files
app.use(require('express-fileupload')(this.fileUploadConfig));
for (let name in this.methods) { for (let name in this.methods) {
debug(`CONNECT METHOD : ${name}`); debug(`CONNECT METHOD : ${name}`);

View File

@ -78,26 +78,14 @@ class Method {
files, files,
cookies cookies
) { ) {
// Execute session
let sessionObject = new Session();
this.MainObject.session(compileParams({
headers,
json,
params,
query,
body,
files,
cookies
}), sessionObject);
let values = sessionObject._getValues();
for (let key in values) { paramsEndless[key] = values[key]; }
let paramsEndless = new Object(); let paramsEndless = new Object();
let paramScheme; let paramScheme;
let required = { missed : [], unsyntax : [] }; let required = { missed : [], unsyntax : [] };
let additional = { missed : [], unsyntax : [] }; let additional = { missed : [], unsyntax : [] };
let checkKeys; let checkKeys;
for (let param in this.paramsCompiles) { let paramsCompiles = Object.assign({}, this.paramsCompiles, this.MainObject.sessionData);
for (let param in paramsCompiles) {
checkKeys = new Array(); checkKeys = new Array();
paramScheme = { paramScheme = {
required : false, required : false,
@ -107,7 +95,7 @@ class Method {
allow_params : ['headers', 'json', 'params', 'query', 'body', 'files', 'cookies'] allow_params : ['headers', 'json', 'params', 'query', 'body', 'files', 'cookies']
}; };
// Configure paramScheme // Configure paramScheme
for (let key in this.paramsCompiles[param]) { paramScheme[key] = this.paramsCompiles[param][key]; } for (let key in paramsCompiles[param]) { paramScheme[key] = paramsCompiles[param][key]; }
// check missible // check missible
if (headers[param] != undefined & paramScheme.allow_params.indexOf('headers') != -1) { checkKeys.push('headers'); } if (headers[param] != undefined & paramScheme.allow_params.indexOf('headers') != -1) { checkKeys.push('headers'); }
if (json[param] != undefined & paramScheme.allow_params.indexOf('json') != -1) { checkKeys.push('json'); } if (json[param] != undefined & paramScheme.allow_params.indexOf('json') != -1) { checkKeys.push('json'); }
@ -183,8 +171,9 @@ class Method {
let isSyntax; let isSyntax;
let value; let value;
let paramScheme; let paramScheme;
let paramsCompiles = Object.assign(this.paramsCompiles, this.MainObject.sessionData);
for (let param in this.paramsCompiles) { for (let param in paramsCompiles) {
paramScheme = { paramScheme = {
required : false, required : false,
type : this.isDynamic ? typesApi.dynamic : typesApi.unknown, type : this.isDynamic ? typesApi.dynamic : typesApi.unknown,
@ -192,7 +181,7 @@ class Method {
conversion : false, conversion : false,
allow_params : ['headers', 'json', 'params', 'query', 'body', 'files', 'cookies'] allow_params : ['headers', 'json', 'params', 'query', 'body', 'files', 'cookies']
}; };
for (let key in this.paramsCompiles[param]) { paramScheme[key] = this.paramsCompiles[param][key]; } for (let key in paramsCompiles[param]) { paramScheme[key] = paramsCompiles[param][key]; }
if (params[param] === undefined) { if (params[param] === undefined) {
if (paramScheme.required) { if (paramScheme.required) {
required.missed.push(param); required.missed.push(param);
@ -233,6 +222,12 @@ class Method {
throw this.MainObject.paramsError(required, additional); throw this.MainObject.paramsError(required, additional);
} }
} }
// Исполнение сессии
let sessionData = new Session();
this.MainObject.session(params, sessionData);
sessionData = sessionData._getValues();
for (let key in sessionData) { params[key] = sessionData[key]; }
// Исполнение группы
return this.execute(params); return this.execute(params);
} }

View File

@ -1,4 +1,4 @@
module.exports = { const types = {
dynamic : { dynamic : {
long_name : 'dynamic', long_name : 'dynamic',
short_name : 'dyn', short_name : 'dyn',
@ -62,6 +62,37 @@ module.exports = {
} }
} }
}, },
file : (allowed_types=null) => ({
long_name : 'file',
short_name : 'file',
checkSchema : (value, schema) => {
if (schema.min_length != undefined) { // min_length
if (value.size < schema.min_length) {
return [false, 'minLengthError'];
}
}
if (schema.max_length != undefined) { // max_length
if (value.size > schema.max_length) {
return [false, 'maxLengthError'];
}
}
if (allowed_types != null) {
let file_extension = value.name.split(".")[value.name.split(".").length - 1];
if (allowed_types.indexOf(file_extension.toLowerCase()) == -1) {
return [false, 'unAllowExtension'];
}
}
return [true, 'ok'];
},
syntax : (value, needs_convert = false) => {
if (typeof(value) != 'object') {
return [false, undefined];
}
}
}),
string : { string : {
long_name : 'string', long_name : 'string',
short_name : 'str', short_name : 'str',
@ -98,4 +129,7 @@ module.exports = {
} }
} }
} }
} };
module.exports = types;