Express Annotate JS — это набор инструментов для быстрого создания приложений на NodeJS, основанный на предложении аннотаций в JavaScript (proposal-decorators
) и фреймворке Express. Основной модуль аннотаций реализован с использованием Annotate JS.
"@palerock/annotate-js": "^1.2.26"
"express": "^4.17.1"
proposal-decorators
и способов его применения через Babel# Установка зависимостей
npm install express@4.17.1
npm install @palerock/annotate-js
# Установка Express Annotate JS
npm install @palerock/express-annotate-js
а также простой пример конфигурации для использования предложений аннотаций.
Установите зависимости для Babel (для использования синтаксиса аннотаций, этот шаг может быть выполнен различными способами):
npm install -D @babel/cli
npm install -D @babel/core
npm install -D @babel/plugin-proposal-class-properties
npm install -D @babel/plugin-proposal-decorators
npm install -D @babel/preset-env
npm install -D @babel/register
```Затем создайте файл конфигурации Babel `.babelrc` в корневой директории следующего содержания:
```json
{
"presets": [
[
"@babel/preset-env"
]
],
"plugins": [
[
"@babel/plugin-proposal-decorators",
{
"legacy": true
}
],
[
"@babel/plugin-proposal-class-properties",
{
"loose": true
}
]
]
}
Создайте файл index.js
в папке src
, содержащий следующий код:
import { launcher, GetMapping, Register } from "@palerock/express-annotate-js";
import { Boot, Autowired, Bean } from "@palerock/annotate-js";
@register // Регистрирует этот класс как веб-сервис
class DemoController {
@autowired
demoService; // Автоматически внедряет сервис
@getmapping({ url: '/' })
getContent({ content }) {
// Получает запросные параметры через аргументы
return `Привет, Express Annotate JS, ${this.demoService.parseContent(content)}`;
}
}
@Bean
class DemoService {
parseContent(content) {
return `Обработанный контент: ${content}`;
}
}
@boot
class Application {
port = 3034;
main() {
// Запускает сервис
launcher.start(this.port);
}
}
Создайте запускательный файл launcher.js
в корневой директории следующего содержания:
require("@babel/register"); // Использует Babel для компиляции
require("./src/index"); // Запускает сервис
Запустите сервис с помощью командной строки npx node launcher.js
.
После запуска введите следующий URL в браузере http://localhost:3034/?content=Enjoy%20it
:
Вы увидите вывод: "Привет, Express Annotate JS, Обработанный контент: Enjoy it"
.
Express Annotate JS также поддерживает асинхронные методы, пример ниже:```javascript import {launcher, GetMapping, Register} from "@palerock/express-annotate-js"; import {Boot, Autowired, Bean, EnergyWire} from "@palerock/annotate-js";
@Register class AsyncController {
@Autowired // Injects APIService
APIService;
@GetMapping({url: '/project/:id'}) // Uses :id to display the ID from the URL as parameters
async getProject({id}) {
return this.APIService.getProjectCache(id);
}
}
@Bean class APIService {
// Injects the wait method from Utils
@EnergyWire('Utils')
wait;
// Cache for storing data
projectCacheMap = {
'1': {
name: 'Проект 01'
},
'2': {
name: 'Проект 02'
}
};
async getProjectCache(id) {
await this.wait(2000); // Waits for 2 seconds
if (id in this.projectCacheMap) {
return this.projectCacheMap[id];
}
return null;
}
}
@Bean class Utils { async wait(ms) { return new Promise(resolve => { setTimeout(() => resolve(), ms); }); } }
@Boot class Application {
port = 3034;
main() {
launcher.start(this.port);
}
}
After starting the service, enter `http://localhost:3034/project/1` into your browser. You will receive a response after waiting for 2 seconds.```json
{"name": "Проект 01"}
As shown in the above example, it is sufficient to add the keywords
async/await
to the required method to support asynchronous methods. At the same time, since Express is used, the format of writing URLs matches the format in Express, where/project/:id
represents a rule for retrieving resources via the GET method according to REST norms.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )