跳過到頁腳內容
NODE 說明

NestJS Node.js(開發者的使用方法)

NestJS 是一個靈活且前進的 Node.js 框架,旨在創建高效且可擴展的伺服器端應用程式和擴展的前端應用程式。 它使用 TypeScript,一種靜態型別的 JavaScript 超集,以提高程式碼可維護性和開發人員效率。 NestJS 擁有一個具有彈性和模組化的設計,融合了函數編程(FP)、面向對象編程(OOP)和函數反應編程(FRP)的原則。 NestJS 通過簡化開發流程並重點強調模組化、依賴注入和裝飾器,促進編寫高度可測試和可維護的程式碼。

相反,IronPDF 是一個強大的庫,旨在簡化在 Node.js 應用程式中創建、編輯和處理 PDF 文件。 它可以將 HTML 轉換為 PDF,合併 PDF,添加水印,並從 PDF 中提取文本和圖像,以及許多其他功能。 IronPDF 提供簡單的 API 用於動態創建和管理 PDF,並可以輕鬆地與 Node.js 可擴展的伺服器端應用程式對接。

開發人員可以通過結合 NestJS 和 IronPDF 創建複雜且複雜的線上應用程式,這些應用程式需要動態 PDF 創建和操作。 生成報表、發票和其他文件驅動的操作的應用程式可能會發現此集成特別有用。 藉助 IronPDF 強大的 PDF 功能和 NestJS 組織良好的模組化設計,開發人員可以創建高效能的應用程式和擁有先進文檔處理功能的出色專案。

什麼是 NestJS?

NestJS 是一個用於 Node.js 伺服器端應用程式開發的開源、前進框架,具有高效率和可擴展性。 它由 TypeScript 編寫,並使用受 Angular 啟發的模組化架構來增強開發人員效率,利用現代 JavaScript 特性。 NestJS 使用依賴注入和裝飾器來鼓勵良好的程式碼組織,使應用程式高度測試和可維護。

由於該框架支持多個傳輸層,包括 HTTP、WebSockets 和 gRPC,開發人員可以設計出各種應用程式。 通過與流行的 Node.js 框架如 Express 和 Fastify 的無縫集成,它提供靈活性和穩定性。 NestJS 還通過提供內置的數據庫、身份驗證和驗證支持來簡化開發人員構建複雜應用程式的過程。

由於其廣泛的 Nest CLI、詳細的文檔和活躍的社群,它是構建高效無伺服器解決方案、微服務和企業級應用程式的理想工具。 由於其模組化設計,這保證了可擴展性和維護的便捷性,它成為現代 Web 開發工具的熱門選擇。 它使開發人員能夠創建可擴展的前端應用程式並提高開發人員的生產力。

NestJS Node.js (它對開發人員的工作原理): 圖 1 - NestJS

NestJS 功能

TypeScript 支持

NestJS 的構建使用了 TypeScript,一種靜態型別的 JavaScript 超集,提供先進的自動完成功能、型別安全性和現代語言功能。 這增加了程式碼的可維護性,並幫助在編譯過程中檢測錯誤。 NestJS 預設支持 JavaScript 和 TypeScript,給予開發人員更多自由。

模組化架構

NestJS 鼓勵使用基於模組的代碼組織。 當相關組件(如控制器、提供者和服務)封裝在一個模組中時,代碼更容易維護、擴展和組織。 應用程式的模組可以在其他區域中使用,鼓勵 DRY(Don't Repeat Yourself)原則。

依賴注入

NestJS 的主要特徵之一是具有複雜的依賴注入系統,使得依賴管理變得更容易。 通過使用注入而不是硬編碼依賴關系,NestJS 創建了鬆耦合且可測試的組件。 這種風格還使更模組化的代碼和改進的關心分離成為可能。

裝飾器

在 NestJS 中廣泛使用裝飾器來創建和設置類及其成員。 通過使用如 @Controller()@Get()@Post()@Injectable() 等裝飾器,使程式碼的可讀性和表達性得到提升,因為每個應用程式組件的作用及其行為都變得清晰明了。

與 Express 和 Fastify 的兼容性

由於其適應性,NestJS 為開發人員提供使用 Fastify 或 Express 作為底層 HTTP 伺服器的選項。 雖然 Fastify 提供更好的性能,但 Express 因其易於使用和高效而聞名。 由於這種靈活性,開發人員可以根據具體需求自訂其應用程式。

中間件

NestJS 支持 Express 類似的中間件功能。 中間件可以在請求到達路由處理器之前處理它們,提供如主體解析、身份驗證和日誌記錄等功能。 這促進了可重用策略在處理請求中的實施。

例外處理

NestJS 具有強大的例外處理系統,允許程序員創建自定義的例外篩選器。 這些篩選器可以通過以標準化的方式捕獲並處理例外,提高應用程式的錯誤管理和響應一致性。

Pipes 和 Guards

Pipes: Pipes 用於實現數據轉換和驗證。它們可以在控制器級別、路由處理器級別或全局實施。 內置了驗證和轉換 Pipes,也可以製作自定義的 Pipes。

Guards: Guards 實現許可和認證的邏輯。 它們利用特定的規則來決定是否允許某請求,例如檢查用戶角色或許可權。

創建和配置 NestJs

可以通過一些簡單的步驟創建和配置一個 NestJS 專案。 這是一個完整的指南,助您開始創建一個新專案。

安裝 NestJS CLI

首先,用 Yarn 或 npm 全局安裝 NestJS CLI。

npm install -g @nestjs/cli
npm install -g @nestjs/cli
SHELL

創建新專案

使用 CLI 開始一個新的 NestJS 專案。 將 "my-nest-app" 更改為您希望的專案名稱。

nest new my-nest-app
nest new my-nest-app
SHELL

專案結構

以下是標準專案結構的簡要概述:

src/
├── app.controller.ts
├── app.controller.spec.ts
├── app.module.ts
├── app.service.ts
├── main.ts
test/
├── app.e2e-spec.ts
└── jest-e2e.json
  • app.controller.ts: 包含應用程式的主要控制器。
  • app.service.ts: 包含應用程式的主要服務。
  • app.module.ts: 應用程式的根模組。
  • main.ts: 應用程式的入口點。

配置模組

要管理配置,安裝 @nestjs/config 套件。

npm install @nestjs/config
npm install @nestjs/config
SHELL

將配置模組添加到 app.module.ts 文件中。

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true, // Make the module global
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

使用配置服務訪問環境變量。

import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class AppService {
  constructor(private configService: ConfigService) {}

  getHello(): string {
    return `Hello World!`;
  }
}

NestJS Node.js (它對開發人員的工作原理): 圖 2 - NestJS專案輸出

入門指南

為了開始,我們將構建一個示例應用程序,該應用程式使用 NestJS 和 IronPDF 來創建帶有動態生成的數據的 PDF 文件。 這是一個詳細的說明手冊,逐步進行。

什麼是 IronPDF?

為了使創建、編輯和管理 PDF 變得更簡單,創建了一個稱為 IronPDF 的應用程式庫。 開發人員可以使用此程式將標題和水印添加到 PDF 中,合併多個 PDF 文檔,從 HTML 文檔中提取文本和圖像等。 由於 IronPDF 的詳細文檔和用戶友好的 API,開發人員可以輕鬆地自動創建高質量的 PDF 文件。 IronPDF 具有所有必要的功能和功能,以提高文檔工作流程並提供卓越的用戶體驗,適用於發票、生產報告和文檔的創建等場景。

NestJS Node.js (它對開發人員的工作原理): 圖 3 - IronPDF

IronPDF 的功能

  • HTML 轉換為 PDF: 這是一個簡單而快速的過程,適用於包括 JavaScript 和 CSS 在內的任何形式的 HTML 文本。
  • PDF 文件合併: 合併多個 PDF 文檔為一個單一的 PDF 文件以簡化文件管理任務。
  • 文本和圖像提取: 從 PDF 文件中提取文本和圖像,以便對其進行進一步數據處理或分析。
  • 水印: 可以將文本或圖像水印應用於 PDF 頁面,用於品牌或安全目的。
  • 包含頁眉和頁腳: 可以將個性化消息或頁碼添加到 PDF 文件的頁眉和頁腳。

安裝 IronPDF

使用 node package manager 安裝所需的 Node.js 包以啟用 IronPDF 功能。

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
SHELL

將 NestJS 與 IronPDF Node.js 集成

將 IronPDF 集成到 NestJS 應用程式中所需的步驟包括:安裝 IronPDF Node.js 套件、創建一個管理 PDF 生成的服務、並創建一個控制器以暴露 PDF 生成的端點。

創建 PDF 服務

建立新服務來管理 PDF 的生成。這個服務將使用 IronPDF 將 HTML 資訊轉換為 PDF。

nest generate service pdf
nest generate service pdf
SHELL

在創建的 pdf.service.ts 文件中應用 PDF 生成邏輯。

// src/pdf/pdf.service.ts
import { Injectable } from '@nestjs/common';
const IronPdf = require('@ironsoftware/ironpdf');
const document = IronPdf.PdfDocument;
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({ licenseKey: '' });

@Injectable()
export class PdfService {
  async generatePdf(htmlContent: string): Promise<Buffer> {
    const pdf = await document.fromHtml(htmlContent);
    const pdfBuffer = await pdf.saveAsBuffer();
    return pdfBuffer;
  }
}

創建 PDF 控制器

創建一個控制器,以使一個端點可用於創建 PDF。

nest generate controller pdf
nest generate controller pdf
SHELL

在生成的 pdf.controller.ts 文件中建立一個接收 HTML 輸入並輸出 PDF 的端點。

// src/pdf/pdf.controller.ts
import { Controller, Post, Body, Res } from '@nestjs/common';
import { PdfService } from './pdf.service';
import { Response } from 'express';

@Controller('pdf')
export class PdfController {
  constructor(private readonly pdfService: PdfService) {}

  @Post('generate')
  async generatePdf(@Body('html') htmlContent: string, @Res() res: Response) {
    const pdfBuffer = await this.pdfService.generatePdf(htmlContent);
    res.set({
      'Content-Type': 'application/pdf',
      'Content-Disposition': 'attachment; filename=generated.pdf',
      'Content-Length': pdfBuffer.length,
    });
    res.end(pdfBuffer);
  }
}

IronPDF 用來將 HTML 內容轉換為 PDF 緩衝區,並使用 PdfService 返回它。 PdfService 使用 IronPDF 將 HTML 呈現為 PDF。 通過 NestJS 控制器,這種集成得到了簡單的處理。 下一步是定義一個 POST 端點 /generate,以接收客戶端的 HTML 內容。 在 API 中,我們使用 IronPDF 庫將提供的 HTML 資料轉換為 PDF。

更具體地,我們使用 pdf.saveAsBuffer() 創建 PDF 文件的二進製緩衝區,並使用 IronPdf.fromHtml(htmlContent) 從 HTML 內容創建 PDF 對象。 隨後,這個緩衝區以相應的 MIME 類型 (application/pdf) 返回給客戶端。 伺服器監聽在端口 3000 上,並記錄 PDF 創建過程中遇到的任何問題。 客戶端在錯誤時收到 500 狀態碼作為回應。 這個設置有助於創建發票、報表或其他文檔的Web應用程式,因為它允許從 HTML 內容動態創建PDF。

NestJS Node.js (它對開發人員的工作原理): 圖 4 - PDF 輸出

結論

結合 IronPDF 的先進 PDF 渲染能力與 NestJS 的可靠、模組化設計,為動態 PDF 創建提供強大的解決方案。 開發人員可以通過創建能夠從 HTML 文本生成 PDF 文件的高效且可擴展的伺服器端應用程式來滿足多種業務目標,包括報表、生產發票和文檔等,通過遵循上述過程。

IronPDF 的特性透過 NestJS 的模組化、裝飾器和依賴注入得以增強,產生易於管理和測試的代碼基。憑藉 IronPDF 處理 PDF 生成的複雜性,開發人員能夠專注於業務邏輯,並輕鬆地創建複雜的應用程式,這要歸功於這種組合。

通過將 IronPDF 和 Iron Software 的產品納入您的企業應用程式開發堆疊,我們可以確保提供豐富功能的高品質軟件解決方案給客戶和最終用戶。 此外,擁有這個堅固的基礎,專案、後端系統和過程優化將變得更簡單。 IronSoftware 和 IronPDF 起價分別為 $799。 這些技術的豐富文檔、活躍的在線開發者社群以及經常更新,使得它們非常適合現代軟件開發專案。

Darrius Serrant
全棧軟件工程師 (WebOps)

Darrius Serrant 擁有邁阿密大學計算機科學學士學位,目前任職於 Iron Software 的全栈 WebOps 市場營銷工程師。從小就迷上編碼,他認為計算既神秘又可接近,是創意和解決問題的完美媒介。

在 Iron Software,Darrius 喜歡創造新事物,並簡化複雜概念以便於理解。作為我們的駐場開發者之一,他也自願教學生,分享他的專業知識給下一代。

對 Darrius 來說,工作令人滿意因為它被重視且有實際影響。