nx/docs/shared/node-server-tutorial/2-project-graph.md
2023-02-24 09:27:40 -05:00

98 lines
2.8 KiB
Markdown

---
title: 'Node Server Tutorial - Part 2: Project Graph'
description: In this tutorial you'll create a backend-focused workspace with Nx.
---
# Node Server Tutorial - Part 2: Project Graph
Run the command: `npx nx graph`. A browser should open up with the following contents:
{% graph height="200px" type="project" jsonFile="shared/node-server-tutorial/initial-project-graph.json" %}
{% /graph %}
You'll notice that there is no dependency drawn from `products-api` to the `auth` library. The project graph is derived from the source code of your workspace. Once we actually wire everything up, the project graph will update accordingly.
### `auth`
Update the contents of the generated `auth.ts` file:
```typescript {% fileName="auth/src/lib/auth.ts" %}
export type AuthResponse = AuthSuccessResponse | AuthFailureResponse;
export interface AuthSuccessResponse {
success: true;
name: string;
}
export interface AuthFailureResponse {
success: false;
}
export function doAuth(): AuthResponse {
return { success: true, name: 'Cheddar' };
}
```
### `products-api`
Add a post endpoint to the `main.ts` file of the root project that uses the `doAuth()` function.
```typescript {% fileName="src/main.ts" %}
import express from 'express';
import { doAuth } from '@products-api/auth';
const host = process.env.HOST ?? 'localhost';
const port = process.env.PORT ? Number(process.env.PORT) : 3000;
const app = express();
app.get('/', (req, res) => {
res.send({ message: 'Hello API' });
});
app.post('/auth', (req, res) => {
res.send(doAuth());
});
app.listen(port, host, () => {
console.log(`[ ready ] http://${host}:${port}`);
});
```
### `e2e`
Update the e2e tests to check the new `/auth` endpoint.
```javascript {% fileName="e2e/src/server/server.spec.ts" %}
import axios from 'axios';
describe('GET /', () => {
it('should return a message', async () => {
const res = await axios.get(`/`);
expect(res.status).toBe(200);
expect(res.data).toEqual({ message: 'Hello API' });
});
});
describe('POST /auth', () => {
it('should return a status and a name', async () => {
const res = await axios.post(`/auth`, {});
expect(res.status).toBe(200);
expect(res.data).toEqual({ success: true, name: 'Cheddar' });
});
});
```
Now run `npx nx graph` again:
{% graph height="200px" type="project" jsonFile="shared/node-server-tutorial/final-project-graph.json" %}
{% /graph %}
The graph now shows the dependency between `products-api` and `auth`.
The project graph is more than just a visualization - Nx provides tooling to optimize your task-running and even automate your CI based on this graph. This will be covered in more detail in: [4: Task Pipelines](/node-server-tutorial/4-task-pipelines).
## What's Next
- Continue to [3: Task Running](/node-server-tutorial/3-task-running)