server-points
v0.0.69
Published
```ts
Downloads
14
Readme
server-points
// server.ts
import {startServer} from 'server-points';
import config from './server.config';
(async _=> {
config = await prepareConfig(config);
await startServer(config);
})()
Installation
Using npm:
$ npm install server-points
Configuration
pathToRootDir
string
*Корневая директория относительно которой будут находиться все файлы проекта: index.html, css, js, картинки, шаблоны, страницы ... и т.д. - задается абсолютным путем.
pathToApps
string
Путь к директории с файлами приложений.
accessAreas
array
*Массив Областей доступа.
- area
objekt
* - объект типа IAccessAreas, Области доступа- urls
array
*url
object
*- value
string
может быть в двух вариантах:
- Путь относительно корневой директории pathToRootDir к файлу или директории. Например: _ /assets/users/images/avatar/main.img_
- Имя приложения и метода. Например: /api_name/method_name
- app
object | boolean
- может быть объектом или true. Если не указано значит урл всегда путь к файлу- appName
- methodName
- maxFileSize
number
- максимальный размер файла в байтах для этого урла
- value
- accessLevel
'free' | 'close' | number
Устанавливает уровень доступа урла от 0, где 0 самый высокий уровень доступа. Например, при уровне урла 2 и при минимальном уровне 4 доступ будет у 2, 1 и 0. - accessLevelOnly
'free' | 'close' | number
Устанавливает уровень доступа урла от, 0 где 0 самый высокий уровень доступа. Например, при уровне урла 2 и при минимальном уровне 4 доступ будет только у 2.
- urls
- area
getUserByToken
function
*Функция типа IGetUserByToken. Должна возвращать объект типа IUser по токену или false если токен не корректный или не передан.
tokenName
string
*Имя cookie ключа для токена авторизации.
port
number
Номер порта если не указан берется из process.env.PORT или 3033.
devRoutersRgExp
RegExp[]
Массив регулярных выражений для определения урлов для devServer, при совпадении будет перенаправлен на текущий сервер
- server-point .
APPS
Методы получают аргумент типа IClient. Все файлы .js расположенные в директории pathToApps и экспортирующие объекты будут инициализированы.
Пример файла config
// server.config.ts
import path from "path";
import DB from "/db";
enum accessLevels {
'system' = 0,
'superAdmin' = 1,
'admin' = 2,
'user' = 3,
'free' = 'free',
'close' = 'close',
}
const Config: IUserConfig = {
pathToRootDir: path.join(__dirname, './projects/maysite'),
pathToApps: path.join(__dirname, './projects/apps'),
async getUserByToken(token: string | undefined): IUser {
const user: IUser = await DB.cash.getLevelByToken(token);
if (typeof user.accessLevel === 'number' && user.accessLevel >= 0) return user;
return false;
},
tokenName: 'may_secret_key_token_name',
accessAreas: [
{
accessLevel: accessLevels.superAdmin,
urls: [
{
value: '/mayApp/secret_method',
app: true
},
{
value: '/assets/images/secret_images',
},
]
},
{
accessLevel: accessLevels.admin,
urls: [
{
value: '/mayApp',
app: true
// все методы приложения mayApp кроме secret_method будут доступны для admin и выше
},
{
value: '/assets/images',
// все файлы и папки в /assets/images кроме /assets/images/secret_images будут доступны для admin и выше
},
]
},
{
accessLevelOnly: accessLevels.admin,
urls: []
},
{
accessLevel: accessLevels.user,
urls: [
{
value: '/may_api/set_admin',
app: true
},
]
},
{
accessLevel: accessLevels.free,
urls: [
{
value: '/dir1/dir2/blabla?value=1&value2=2',
app: {
appName: 'appWork',
methodName: 'resolve',
}
},
{
value: '/dir3/dir4/anyfile.txt',
app: {
appName: 'appWork',
methodName: 'resolve',
}
},
// Оба урла будут обработаны приложением appWork, методом resolve
]
},
],
port: 3000,
}
export = Config