* docs(core): cleanup tutorials * chore: review fix Co-authored-by: Isaac Mann <isaacplmann@users.noreply.github.com> Co-authored-by: Isaac Mann <isaacplmann@users.noreply.github.com>
88 lines
2.4 KiB
Markdown
88 lines
2.4 KiB
Markdown
# Node Nx Tutorial - Step 4: Create Libraries
|
|
|
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/V29I_DHGlB8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
|
|
|
Libraries are not just a way to share code in Nx. They are also useful for factoring out code into small units with a well-defined public API.
|
|
|
|
## Public API
|
|
|
|
Every library has an `index.ts` file, which defines its public API. Other applications and libraries should only access what the `index.ts` exports. Everything else in the library is private.
|
|
|
|
## Controller libraries
|
|
|
|
To illustrate how useful libraries can be, create a new Auth library with a controller.
|
|
|
|
Run
|
|
|
|
```bash
|
|
nx g @nrwl/nest:lib auth --controller
|
|
```
|
|
|
|
> We added the `--controller` flag here to generate a controller along with the library scaffolding.
|
|
|
|
You should see the following:
|
|
|
|
```treeview
|
|
myorg/
|
|
├── apps/
|
|
│ └── todos/
|
|
├── libs/
|
|
│ ├── auth/
|
|
│ │ ├── jest.config.js
|
|
│ │ ├── src/
|
|
│ │ │ ├── index.ts
|
|
│ │ │ └── lib/
|
|
│ │ │ ├── auth.controller.spec.ts
|
|
│ │ │ ├── auth.controller.ts
|
|
│ │ │ └── auth.module.ts
|
|
│ │ ├── tsconfig.json
|
|
│ │ ├── tsconfig.lib.json
|
|
│ │ └── tsconfig.spec.json
|
|
│ └── data/
|
|
├── tools/
|
|
├── nx.json
|
|
├── package.json
|
|
├── tsconfig.base.json
|
|
└── workspace.json
|
|
```
|
|
|
|
Modify the `libs/auth/src/lib/auth.controller.ts` file like this:
|
|
|
|
```typescript
|
|
import { Controller, Get } from '@nestjs/common';
|
|
|
|
@Controller('auth')
|
|
export class AuthController {
|
|
@Get()
|
|
auth() {
|
|
return {
|
|
authenticated: true,
|
|
};
|
|
}
|
|
}
|
|
```
|
|
|
|
> In code destined for production, you would actually have a proper authentication check here.
|
|
|
|
## Use the new library
|
|
|
|
**Now import `AuthModule` into `apps/todos/src/app/app.module.ts`.**
|
|
|
|
```typescript
|
|
import { Module } from '@nestjs/common';
|
|
|
|
import { AppController } from './app.controller';
|
|
import { AppService } from './app.service';
|
|
import { TodosService } from './todos/todos.service';
|
|
import { AuthModule } from '@myorg/auth';
|
|
|
|
@Module({
|
|
imports: [AuthModule],
|
|
controllers: [AppController],
|
|
providers: [AppService, TodosService],
|
|
})
|
|
export class AppModule {}
|
|
```
|
|
|
|
**Restart `nx serve todos` then go to http://localhost:3333/auth. You should see `{ authenticated: true }`**
|