跳至頁尾內容
NODE 說明

hapi node js(開發者的使用方法)

產生動態PDF文件是當前網頁開發環境中許多應用程式的典型需求。 在伺服器端產生和處理PDF的能力對於生成報告、發票和使用者指南至關重要。 此文章將討論如何將IronPDF(一種穩定的PDF建立套件)與Hapi.js,一個強大的Node.js框架,進行整合。 我們還將探討一些可行的方法,以確保Node.js、Hapi伺服器和.NET之間的順利連接,因為IronPDF是.NET程式庫。

了解Hapi.js

名為Hapi伺服器插件的開源框架可用於建立可擴展且可靠的Node.js線上應用程式、核心API和服務。 由Walmart Labs開發的Hapi.js以其強大的插件系統、框架的多元生態系統和可擴展的插件以及大量可配置的選項而聞名。 它簡化了伺服器設定、請求處理、資料庫使用和路由設置,因此是建立現代網頁應用程式的好選擇。

hapi Node.js(開發者中的運作方式):圖1 - Hapi.js

插件系統和豐富的生態系統

Hapi.js的強大插件社區擴展了其基本功能。 由於其模塊化,Hapi開發人員在為輸入驗證、身份驗證和快取等功能新增業務邏輯時,基本框架不會變得臃腫。 插件系統鼓勵可管理和可重用的程式設計。

路由

Hapi.js提供了一個強大且可調整的路由系統。 它提供路由特定的配置選項,如驗證、身份驗證和響應格式,並支持多種HTTP協議。 由於這種靈活性,可以輕鬆地建立複雜的路由邏輯。

基於配置的方法

憑藉其配置驅動的方法,Hapi.js使開發人員可以通過配置物件來指定伺服器行為。 由於經常可以在不更改應用程式或業務邏輯程式碼的情況下實施伺服器行為的更改,因此產生了較少的程式碼、更清潔的程式碼和更容易維護的程式碼庫。

輸入驗證和有效負載解析

Joi是一種高效的資料庫模式描述語言和資料驗證器,可輕鬆與Hapi.js互動。 這種整合允許強大的輸入驗證,確保請求資料在處理之前符合預定標準。 Hapi.js還支持對各種資料型別(如JSON和表單資料)的有效負載解析。

內建身份驗證與授權

通過hapi-auth插件,Hapi.js為可擴展的網頁應用程式提供了一套完整的身份驗證和授權機制。 此整合授權系統支持多種身份驗證技術,例如Basic、JWT、OAuth和自定義方案。 在路由層級管理授權的能力確保安全的資源存取和具有最小開銷的安全框架。 Hapi.js經過設計可以在複雜的企業環境中運行。 Hapi允許我們構建各種應用程式,如網站、伺服器、HTTP代理應用程式等。

錯誤處理

Hapi.js提供了豐富的錯誤處理功能。 開發人員可以定義自定義錯誤處理器,以在全域或單個項目的路由層級處理問題。 這確保問題得到一致處理,並且客戶可以收到有見地的錯誤回答。

日誌記錄與除錯

Hapi生態系統包含強大的日誌記錄和除錯設施,可幫助修正錯誤。 它可以設定為記錄和記下許多種類的事件,如伺服器活動、失敗和請求生命周期事件。 此日誌記錄對於排除故障和應用程式性能監控非常有幫助。

可擴展性

Hapi.js的設計十分可擴展,例如開發人員可製作自定義插件,以更改或增強現有行為。 由於其可擴展性,Hapi.js 可根據任何專案的獨特需求進行調整。

安全性

通過提供對廣泛使用的安全流程、可擴展應用程式和框架的整合支持,包括輸入驗證、內容安全政策和HTTP標頭配置,Hapi.js非常重視安全性。 開發人員可以通過高度關注安全性來建立能夠抵禦典型漏洞的應用和框架。

创建和配置 Hapi Node.js

建立和設置Hapi.js伺服器需要多個步驟。 這是一份詳細指南,將幫助您安裝插件、建立路由和設置基本的Hapi.js伺服器。 您將獲得建立路由、配置伺服器、設置初始設定和使用插件的指引過程。

安裝Hapi.js

安裝Hapi.js和任何其他必要的依賴項:

npm install @hapi/hapi
npm install @hapi/hapi
SHELL

建立伺服器

要建立一個基本的Hapi.js伺服器,請建立一個名為server.js的文件,並向其中新增以下程式碼:

const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a simple GET route
    server.route({
        method: 'GET',
        path: '/',
        handler: (request, h) => {
            return 'Hello world!';
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a simple GET route
    server.route({
        method: 'GET',
        path: '/',
        handler: (request, h) => {
            return 'Hello world!';
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
JAVASCRIPT

新增路由配置

Hapi.js路由的更高級配置選項包括參數、查詢參數、有效負載驗證、快取及專門為實現特定路由而定制的插件。

帶參數的路由

const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a GET route with path parameter
    server.route({
        method: 'GET',
        path: '/user/{id}',
        handler: (request, h) => {
            const userId = request.params.id;
            return `User ID: ${userId}`;
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a GET route with path parameter
    server.route({
        method: 'GET',
        path: '/user/{id}',
        handler: (request, h) => {
            const userId = request.params.id;
            return `User ID: ${userId}`;
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
JAVASCRIPT

帶查詢參數的路由

此外,利用Hapi.js可以簡化處理查詢參數的過程。 這是如何做到的:

const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a GET route with query parameter
    server.route({
        method: 'GET',
        path: '/search',
        handler: (request, h) => {
            const query = request.query.q;
            return `Search query: ${query}`;
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a GET route with query parameter
    server.route({
        method: 'GET',
        path: '/search',
        handler: (request, h) => {
            const query = request.query.q;
            return `Search query: ${query}`;
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
JAVASCRIPT

一個GET請求到/search?q=Hapi將會回應"搜尋查詢:Hapi"。

hapi Node.js(開發者中的運作方式):圖2 - 使用查詢參數進行路由輸出

運行伺服器

執行以下命令以啟動您的伺服器:

node server.js
node server.js
SHELL

在您的終端中,您應該會看到訊息伺服器運行於http://localhost:3000。當您存取http://localhost:3000時,則會在您的瀏覽器中出現"Hello, Hapi!"。

快速入門

IronPDF for Node.js相當容易開始使用! 這裡詳細分解了涉及的步驟。

什麼是IronPDF?

IronPDF是一個應用程式庫,旨在使PDF的建立、編輯和管理變得更加容易。 這個工具允許開發人員從HTML文件中提取文字和圖像,合併多個PDF文件,應用標頭和浮水印等等。 使用IronPDF的使用者友好API和廣泛的文件,開發人員可以輕鬆地透過編程方式建立高質量的PDF文件,這樣可以簡化處理PDF的過程。 IronPDF擁有所有功能和能力,無論是用於生成帳單、報告或文件,在各種設置中增強文件工作流程和提供出色的使用者體驗。

hapi Node.js(開發者中的運作方式):圖3 - IronPDF

IronPDF的功能

轉換HTML至PDF: 您可以快速簡單地將HTML內容或靜態文件(包括CSS和JavaScript)轉換為PDF檔案。

PDF合併:為方便文件管理任務,將多個PDF文件合併為一個PDF檔。

文字和圖像提取:從PDF文件中提取文字和圖像,以便進一步處理或分析。

新增浮水印:出於安全或品牌原因,在PDF頁面上新增文字或圖片浮水印。

新增標頭和尾頁:在PDF文件中新增帶有個性化文字或頁碼的標頭和尾頁。

安裝IronPDF

使用節點套件管理器安裝必要的Node.js套件以啟用IronPDF功能。

 npm i @ironsoftware/ironpdf

整合Hapi.js與IronPDF

首先,配置一個簡單的Hapi.js伺服器以響應網頁上的進入請求。 此伺服器已準備好接收要求以生成PDF文件。

const Hapi = require('@hapi/hapi');
const IronPdf = require("@ironsoftware/ironpdf");

// Configure the IronPDF setup
const document = IronPdf.PdfDocument;
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({licenseKey: ''});

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a route for PDF generation
    server.route({
        method: 'GET',
        path: '/',
        handler: async (request, h) => {
            // Generate PDF here
            console.log('Connected');
            await generatePdf();
            return h.file('demo.pdf');
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Function to generate PDF from HTML using IronPDF
const generatePdf = async () => {
    const htmlContent = '<html><body><h1>Hello, IronPDF!</h1></body></html>';
    (await document.fromHtml(htmlContent)).saveAs('demo.pdf');
};

// Call the initialization function
init();
const Hapi = require('@hapi/hapi');
const IronPdf = require("@ironsoftware/ironpdf");

// Configure the IronPDF setup
const document = IronPdf.PdfDocument;
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({licenseKey: ''});

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a route for PDF generation
    server.route({
        method: 'GET',
        path: '/',
        handler: async (request, h) => {
            // Generate PDF here
            console.log('Connected');
            await generatePdf();
            return h.file('demo.pdf');
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Function to generate PDF from HTML using IronPDF
const generatePdf = async () => {
    const htmlContent = '<html><body><h1>Hello, IronPDF!</h1></body></html>';
    (await document.fromHtml(htmlContent)).saveAs('demo.pdf');
};

// Call the initialization function
init();
JAVASCRIPT

我們配置一台伺服器以接聽3000端口上的HTTP呼叫並導入Hapi.js。 為處理對根路徑/的HTTP GET請求,定義了一個路由。 要使用IronPDF建立PDF內容,我們在路由處理程式中調用generatePdf函式。 以異步方式將HTML資料渲染為PDF緩衝區,匯入IronPDF。 內容生成後,PDF內容作為響應返回,具有相關的內容型別(application/pdf)。 另外,我們配置Content-Disposition標頭來指定PDF是應該作為附件下載還是在瀏覽器中內聯顯示(可選)。

hapi Node.js(開發者中的運作方式):圖4 - PDF輸出

結論

總之,使用Hapi.js和IronPDF在Node.js應用程式中提供了一種快速生成PDF文件的有力方式。 透過遵循本文中提供的指令,您可以快速設置一個Hapi.js伺服器以處理HTTP請求,並使用IronPDF從HTML內容建立PDF或執行其他PDF建立操作。

對於在Node.js中建立網頁伺服器,Hapi.js提供了一個靈活且使用者友好的框架,具有面向外部的介面,使得構建路由和管理HTTP請求變得簡單。 這個框架得到了IronPDF的增強,提供了一個廣泛的功能集合來建立PDF,包括合併PDF文件、新增標頭和尾頁,並將HTML文字轉換為PDF。

因為有豐富的文件和活躍的開發者社區支持,Hapi.js和IronPDF是整合PDF建立能力到您的Node.js應用程式的可靠選擇。 無論您的開發經驗水平如何,此整合提供了一種簡單的方法來向您的應用中新增PDF建立功能。

通過將IronPDF和Iron Software產品整合到您的開發堆疊中,我們可以為客戶和最終使用者保證功能豐富的高端軟體解決方案。 此外,這將有助於專案和流程的優化。 Iron Software的價格從$999開始。 由於其詳細的文件、充滿活力的線上開發者社區以及頻繁的升級,這些工具非常適合當代軟體開發專案。

Darrius Serrant
全端軟體工程師(WebOps)

Darrius Serrant擁有邁阿密大學的電腦科學學士學位,並在Iron Software擔任全端WebOps行銷工程師。從小就對程式設計有興趣,他認為計算既神秘又易於理解,成為創意和問題解決的完美媒介。

在Iron Software,Darrius喜歡創造新事物並簡化複雜的概念,使其更易於理解。作為我們的常駐開發人員之一,他還志願教學,將他的專業知識傳授給下一代。

對Darrius來說,他的工作是有意義的,因為它有價值且對社會有真正的影響。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話