Skip to main content

Першыя крокі

У гэтым наборы артыкулаў вы даведаецеся асноўныя асновы Nest. Каб азнаёміцца ​​з асноўнымі будаўнічымі блокамі прыкладанняў Nest, мы створым базавую праграму CRUD з функцыямі, якія ахопліваюць шмат пытанняў на пачатковым узроўні.

Мова

Мы любім TypeScript , але больш за ўсё мы любім Node.js. Вось чаму Nest сумяшчальны як з TypeScript, так і з чыстым JavaScript . Nest выкарыстоўвае найноўшыя моўныя магчымасці, таму, каб выкарыстоўваць яго з ванільным JavaScript, нам спатрэбіцца кампілятар Babel .

Мы ў асноўным будзем выкарыстоўваць TypeScript у прадстаўленых прыкладах, але вы заўсёды можаце пераключыць фрагменты кода на сінтаксіс JavaScript (проста націсніце, каб пераключыць кнопку мовы ў правым верхнім куце кожнага фрагмента).

Перадумовы

Пераканайцеся, што ў вашай аперацыйнай сістэме ўсталяваны Node.js (версія >= 16).

Усталяваць

З Nest CLI наладзіць новы праект даволі проста. З усталяваным npm вы можаце стварыць новы праект Nest з дапамогай наступных каманд у тэрмінале АС:

$ npm i -g @nestjs/cli
$ nest new project-name
Падказка

Каб стварыць новы праект з больш строгім наборам функцый TypeScript, перадайце сцяг --strict камандзе nest new .

Будзе створаны каталог project-name , будуць устаноўлены модулі вузлоў і некалькі іншых шаблонных файлаў, а таксама будзе створаны каталог src/ і запоўнены некалькімі асноўнымі файламі.

src
app.controller.spec.ts
app.controller.ts
app.module.ts
app.service.ts
main.ts

Вось кароткі агляд гэтых асноўных файлаў:

app.controller.tsБазавы кантролер з адным маршрутам.
app.controller.spec.tsМодульныя тэсты для кантролера.
app.module.tsКаранёвы модуль прыкладання.
app.service.tsБазавая паслуга з дапамогай аднаго метаду.
main.tsThe entry file of the application which uses the core function NestFactory to create a Nest application instance.

main.ts уключае асінхронную функцыю, якая будзе запускаць наша дадатак:

@@filename(main)

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
@@switch
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();

Каб стварыць асобнік прыкладання Nest, мы выкарыстоўваем асноўны клас NestFactory . NestFactory прапануе некалькі статычных метадаў, якія дазваляюць стварыць асобнік прыкладання. Метад create() вяртае аб'ект прыкладання, які выконвае інтэрфейс INestApplication . Гэты аб'ект забяспечвае набор метадаў, якія апісаны ў наступных раздзелах. У прыведзеным вышэй прыкладзе main.ts мы проста запускаем наш HTTP-слухач, які дазваляе прыкладанню чакаць ўваходных HTTP-запытаў.

Note that a project scaffolded with the Nest CLI creates an initial project structure that encourages developers to follow the convention of keeping each module in its own dedicated directory.

Падказка

Па ўмаўчанні, калі пры стварэнні прыкладання ўзнікае якая-небудзь памылка, ваша прыкладанне выйдзе з кодам 1 . Калі вы хочаце, каб замест гэтага выдавалася памылка, адключыце опцыю abortOnError (напрыклад, NestFactory.create(AppModule, {{ '{' }} abortOnError: false {{ '}' }}) .

Платформа

Nest імкнецца быць фрэймворкам, які не залежыць ад платформы. Незалежнасць ад платформы дазваляе ствараць шматразовыя лагічныя часткі, якія распрацоўшчыкі могуць выкарыстоўваць у розных тыпах прыкладанняў. Тэхнічна Nest можа працаваць з любым фрэймворкам Node HTTP пасля стварэння адаптара. Існуюць дзве стандартныя платформы HTTP, якія падтрымліваюцца: express і fastify . Вы можаце выбраць той, які найбольш адпавядае вашым патрэбам.

platform-expressExpress is a well-known minimalist web framework for node. It's a battle tested, production-ready library with lots of resources implemented by the community. The @nestjs/platform-express package is used by default. Many users are well served with Express, and need take no action to enable it.
platform-fastifyFastify is a high performance and low overhead framework highly focused on providing maximum efficiency and speed. Read how to use it here.

Whichever platform is used, it exposes its own application interface. These are seen respectively as NestExpressApplication and NestFastifyApplication.

When you pass a type to the NestFactory.create() method, as in the example below, the app object will have methods available exclusively for that specific platform. Note, however, you don't need to specify a type unless you actually want to access the underlying platform API.

const app = await NestFactory.create<NestExpressApplication>(AppModule);

Запуск прыкладання

Пасля завяршэння працэсу ўстаноўкі вы можаце выканаць наступную каманду ў камандным радку вашай АС, каб запусціць прыкладанне праслухоўванне ўваходных HTTP-запытаў:

$ npm run start
Падказка

Каб паскорыць працэс распрацоўкі (у 20 разоў больш хуткія зборкі), вы можаце выкарыстоўваць канструктар SWC , перадаўшы сцяг -b swc у скрыпт start наступным чынам: npm run start -- -b swc .

Гэтая каманда запускае праграму з HTTP-серверам, які праслухоўвае порт, вызначаны ў файле src/main.ts . Пасля запуску прыкладання адкрыйце браўзер і перайдзіце да http://localhost:3000/ . Вы павінны ўбачыць Hello World! паведамленне.

Каб сачыць за зменамі ў вашых файлах, вы можаце выканаць наступную каманду, каб запусціць прыкладанне:

$ npm run start:dev

Гэтая каманда будзе сачыць за вашымі файламі, аўтаматычна перакампілюючы і перазагружаючы сервер.

Linting and formatting

CLI provides best effort to scaffold a reliable development workflow at scale. Thus, a generated Nest project comes with both a code linter and formatter preinstalled (respectively eslint and prettier).

Падказка

Не ўпэўнены ў ролі фарматаў і лінтараў? Даведайцеся розніцу тут .

Каб забяспечыць максімальную стабільнасць і пашыральнасць, мы выкарыстоўваем пакеты Base eslint і prettier cli. Такая ўстаноўка дазваляе акуратную інтэграцыю IDE з афіцыйнымі пашырэннямі.

Для асяроддзя без галавы, дзе IDE не мае значэння (бесперапынная інтэграцыя, перахваткі Git і г.д.), праект Nest пастаўляецца з гатовымі да выкарыстання сцэнарыямі npm .

# Lint and autofix with eslint
$ npm run lint

# Format with prettier
$ npm run format