节点帮助

Node.js Fetch(对于开发人员如何工作)

发布 2024年九月29日
分享:

Node Fetch 是 Node.js 生态系统中受欢迎的轻量级模块,旨在使 HTTP 请求简单直观。它提供了一种轻量且熟悉的方式与 Web API 进行交互,灵感来自于浏览器环境中可用的 Fetch API。 Node-fetch 在 Node.js 中提供 Fetch API 支持,使服务工作器能够有效处理 HTTP 头并执行 fetch HTTPS 请求。

本文将帮助您探索Node-fetch的关键特性和用法,为希望简化其在Node.js中HTTP请求处理的开发人员提供全面的指南。 我们还将利用 IronPDF,一个用于Node.js的PDF库,使程序员能够创建和编辑PDF,将HTML内容转换为PDF等等。

什么是Node.js fetch?

Node fetch 是一个将 Fetch API 引入 Node.js 的模块。 Fetch API 是一个用于发起 HTTP 请求的现代接口,常用于网页浏览器中。 Node.js fetch 复制了此功能,使 Node.js 应用程序能够以同样的便捷性和简单性执行 HTTP 请求。 这使它成为那些已经熟悉 Fetch API 的开发人员或那些正在寻找一种简单方式来处理其 Node.js 应用程序中 HTTP 请求的开发人员的绝佳选择。

Node.js Fetch(开发人员如何使用):图 1 - Node.js Fetch

Node.js Fetch 的关键功能

1. 简单性和熟悉度

Node.js fetch 模拟浏览器中的 Fetch API,为开发人员提供一个简单且熟悉的接口。

2. 基于Promise

类似于 Fetch API,Node.js fetch 是基于 Promise 的,使开发人员能够以更可读和易于管理的方式编写异步代码。

3. 轻量级

Node.js fetch 是一个极简的库,使其快速且高效。 它没有较大型HTTP库的开销,保持您的应用程序轻量化。

4. 兼容性

Node.js fetch 支持多种 HTTP 方法、头和响应类型,具有很高的灵活性。

5. 流媒体

它支持流式响应,这对于高效处理大型负载非常有用。

安装 Node.js Fetch

入门 Node-fetch,您需要通过 npm 安装它。 (节点软件包管理器). 在你的项目目录中运行以下命令:

npm install node-fetch
npm install node-fetch
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install node-fetch
VB   C#

基本用法

下面是一个使用 Node.js fetch 进行 GET 请求的基本示例:

import fetch from 'node-fetch';
import fs from 'fs';
const url = 'https://jsonplaceholder.typicode.com/posts';
fetch(url)
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        return response.json();
    })
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error('There has been a problem with your fetch operation:', error);
    });
import fetch from 'node-fetch';
import fs from 'fs';
const url = 'https://jsonplaceholder.typicode.com/posts';
fetch(url)
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        return response.json();
    })
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error('There has been a problem with your fetch operation:', error);
    });
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'import fetch from 'node-fetch'; import fs from 'fs'; const url = 'https: fetch(url).@then(response => { if(!response.ok) { throw New @Error('Network response was @not ok'); } Return response.json(); }).@then(data => { console.log(data); }).catch(@error => { console.@error('There has been a problem @with your fetch operation:', @error); });
VB   C#

此代码片段演示了一个简单的GET请求来从API获取JSON数据。 fetch 函数返回一个承诺,该承诺解析为响应对象。 然后,您可以调用返回响应的方法,例如 json()**解析响应主体。

控制台输出

Node.js Fetch(开发者是如何运作的):图2 - 使用Node.js fetch从API URL "https://jsonplaceholder.typicode.com/posts"进行简单的GET请求以获取JSON数据的控制台输出。

高级用法

Node.js fetch 还支持更多高级功能,例如,进行 POST 请求、设置自定义请求头对象以及处理不同的响应类型。

发起 POST 请求

import fetch from 'node-fetch';
import fs from 'fs';
const url = 'https://jsonplaceholder.typicode.com/posts';
const data = { key: 'value' };
fetch(url, {
    method: 'POST',
    // Content Type Header
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
})
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        return response.json();
    })
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error('There has been a problem with your fetch operation:', error);
    });
import fetch from 'node-fetch';
import fs from 'fs';
const url = 'https://jsonplaceholder.typicode.com/posts';
const data = { key: 'value' };
fetch(url, {
    method: 'POST',
    // Content Type Header
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
})
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        return response.json();
    })
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error('There has been a problem with your fetch operation:', error);
    });
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'import fetch from 'node-fetch'; import fs from 'fs'; const url = 'https: const data = { key: 'value' }; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }).@then(response => { if(!response.ok) { throw New @Error('Network response was @not ok'); } Return response.json(); }).@then(data => { console.log(data); }).catch(@error => { console.@error('There has been a problem @with your fetch operation:', @error); });
VB   C#

此示例展示如何使用 JSON 负载发送 POST 请求对象。 headers 选项用于指定新响应的内容类型,body 选项包含序列化的 JSON 数据。

控制台输出

Node.js Fetch (开发者须知其工作原理):图3 - 使用 Node.js fetch 发送到 URL https://jsonplaceholder.typicode.com/posts 的 POST 请求对象的控制台输出

处理流式响应

import fetch from 'node-fetch';
import fs from 'fs';
const url = 'https://jsonplaceholder.typicode.com/posts';
fetch(url)
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        const dest = fs.createWriteStream('./large-data.json');
        response.body.pipe(dest);
    })
    .catch(error => {
        console.error('There has been a problem with your fetch operation:', error);
    });
import fetch from 'node-fetch';
import fs from 'fs';
const url = 'https://jsonplaceholder.typicode.com/posts';
fetch(url)
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        const dest = fs.createWriteStream('./large-data.json');
        response.body.pipe(dest);
    })
    .catch(error => {
        console.error('There has been a problem with your fetch operation:', error);
    });
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'import fetch from 'node-fetch'; import fs from 'fs'; const url = 'https: fetch(url).@then(response => { if(!response.ok) { throw New @Error('Network response was @not ok'); } const dest = fs.createWriteStream('./large-data.json'); response.body.pipe(dest); }).catch(@error => { console.@error('There has been a problem @with your fetch operation:', @error); });
VB   C#

在此示例中,响应主体作为文件流传输到服务器,展示了如何高效处理大型响应。

输出

Node.js Fetch(开发人员如何运作):图4 - 输出文件:large-data.json

错误处理

在处理HTTP请求时,正确的错误处理至关重要。 Node.js fetch 错误响应提供了一种使用 Promise 捕获和处理错误的简单方法。

fetch(url)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.json();
    })
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error('Fetch error:', error);
    });
fetch(url)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.json();
    })
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error('Fetch error:', error);
    });
fetch(url).then(Function(response)
	If Not response.ok Then
		Throw New [Error](`HTTP [error](Not status):= ${response.status}`)
	End If
	Return response.json()
End Function).then(Sub(data)
	console.log(data)
End Sub).catch(Function([error]) {console.error(})
VB   C#

如果响应头状态不在 200-299 范围内,则会抛出错误,并且 catch 块会处理请求过程中发生的任何错误,否则将返回有效的 JSON 响应。

在 Node.js 中使用 Node.js fetch 和 IronPDF 生成 PDF 文件

Node fetch 是 Node.js 生态系统中用于进行 HTTP 获取请求的流行库。 结合时 IronPDF强大的PDF生成库,它成为从各种网络资源创建PDF的多功能工具。

什么是IronPDF?

IronPDF 是一个强大的库,允许开发人员以简单高效的方式创建、编辑和提取PDF内容。 适用于 C#、Python、Java 和 Node.js,IronPDF 通过其直观的 API 使 PDF 操作变得简单。

Node.js Fetch(开发者如何使用):图5 - IronPDF for Node.js:Node.js PDF 库

安装IronPDF库

首先,您需要安装 IronPDF 在您的项目中。 使用以下 npm 命令安装这些库:

npm i @ironsoftware/ironpdf
npm i @ironsoftware/ironpdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm i @ironsoftware/ironpdf
VB   C#

让我们探讨如何使用Node.js fetch与IronPDF结合生成来自网络内容源的PDF文件。

结合Node.js的fetch和IronPDF

您可以利用 Node.js fetch 和 IronPDF 的强大功能动态获取网页内容并生成 PDF。 例如,您可能会获取一个 API 端点的数据,生成动态 HTML,并 将其转换为 PDF. 以下示例演示了如何完成此任务:

import fetch from 'node-fetch';
import { PdfDocument } from '@ironsoftware/ironpdf';
(async () => {
    // Replace the apiUrl with the actual Url
    const apiUrl = "https://jsonplaceholder.typicode.com/posts";
    // Fetch data from API
    const response = await fetch(apiUrl);
    const data = await response.json();
    // Create dynamic HTML content with a table
    const htmlContent = `
        <!DOCTYPE html>
        <html>
        <head>
            <title>Data Report</title>
            <style>
                body {
                    font-family: Arial, sans-serif;
                    margin: 40px;
                }
                table {
                    width: 100%;
                    border-collapse: collapse;
                }
                table, th, td {
                    border: 1px solid black;
                }
                th, td {
                    padding: 10px;
                    text-align: left;
                }
                th {
                    background-color: #f2f2f2;
                }
                h1 {
                    text-align: center;
                }
            </style>
        </head>
        <body>
            <h1>Data Report</h1>
            <table>
                <tr>
                    <th>User ID</th>
                    <th>ID</th>
                    <th>Title</th>
                    <th>Body</th>
                </tr>
                ${data.map(item => `
                    <tr>
                        <td>${item.userId}</td>
                        <td>${item.id}</td>
                        <td>${item.title}</td>
                        <td>${item.body}</td>
                    </tr>
                `).join('')}
            </table>
        </body>
        </html>
    `;
    // Generate PDF from the HTML string
    const pdfFromHtmlString = await PdfDocument.fromHtml(htmlContent);
    await pdfFromHtmlString.saveAs("dynamic_report.pdf");
    console.log("PDF generated from API data successfully!");
})();
import fetch from 'node-fetch';
import { PdfDocument } from '@ironsoftware/ironpdf';
(async () => {
    // Replace the apiUrl with the actual Url
    const apiUrl = "https://jsonplaceholder.typicode.com/posts";
    // Fetch data from API
    const response = await fetch(apiUrl);
    const data = await response.json();
    // Create dynamic HTML content with a table
    const htmlContent = `
        <!DOCTYPE html>
        <html>
        <head>
            <title>Data Report</title>
            <style>
                body {
                    font-family: Arial, sans-serif;
                    margin: 40px;
                }
                table {
                    width: 100%;
                    border-collapse: collapse;
                }
                table, th, td {
                    border: 1px solid black;
                }
                th, td {
                    padding: 10px;
                    text-align: left;
                }
                th {
                    background-color: #f2f2f2;
                }
                h1 {
                    text-align: center;
                }
            </style>
        </head>
        <body>
            <h1>Data Report</h1>
            <table>
                <tr>
                    <th>User ID</th>
                    <th>ID</th>
                    <th>Title</th>
                    <th>Body</th>
                </tr>
                ${data.map(item => `
                    <tr>
                        <td>${item.userId}</td>
                        <td>${item.id}</td>
                        <td>${item.title}</td>
                        <td>${item.body}</td>
                    </tr>
                `).join('')}
            </table>
        </body>
        </html>
    `;
    // Generate PDF from the HTML string
    const pdfFromHtmlString = await PdfDocument.fromHtml(htmlContent);
    await pdfFromHtmlString.saveAs("dynamic_report.pdf");
    console.log("PDF generated from API data successfully!");
})();
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'import fetch from 'node-fetch'; import { PdfDocument } from '@ironsoftware/ironpdf'; (async() => { const apiUrl = "https://jsonplaceholder.typicode.com/posts"; const response = await fetch(apiUrl); const data = await response.json(); const htmlContent = ` <!DOCTYPE html> <html> <head> <title> Data Report</title> <style> body { font-family: Arial, sans-serif; margin: 40px; } table { width: 100%; border-collapse: collapse; } table, th, td { border: 1px solid black; } th, td { padding: 10px; text-align: left; } th { background-color: #f2f2f2; } h1 { text-align: center; } </style> </head> <body> <h1> Data Report</h1> <table> <tr> <th> User ID</th> <th> ID</th> <th> Title</th> <th> Body</th> </tr> ${data.map(item => ` <tr> <td> ${item.userId}</td> <td> ${item.id}</td> <td> ${item.title}</td> <td> ${item.body}</td> </tr> `).join('')} </table> </body> </html> `; const pdfFromHtmlString = await PdfDocument.fromHtml(htmlContent); await pdfFromHtmlString.saveAs("dynamic_report.pdf"); console.log("PDF generated from API data successfully!"); })();
VB   C#

输出 PDF

JSON 响应输出被优雅地映射到 HTML 表格,IronPDF 准确地转换了其所有样式。

Node.js Fetch(针对开发人员的工作方式):图6 - 使用IronPDF准确地将HTML字符串转换为PDF。

有关更多详细信息,请访问 IronPDF 及其功能,请参考此 文档页面.

结论

Node fetch 是一个功能强大且简单的工具,用于在Node.js中发起HTTP请求。 其熟悉的API、基于Promise的方法以及轻量级特性使其成为初学者和有经验的开发者的优秀选择。 无论您是执行基本的 GET 请求还是处理带有自定义头的复杂 POST 请求,Node fetch 都提供了一种与 Web API 交互的简洁高效的方法。

组合 Node fetchIronPDF 提供了一种强大且灵活的方式,可以从Node.js中的各种网页内容源生成PDF。 通过集成这两个库,您可以轻松创建利用网络数据并生成专业 PDF 的强大应用程序。

IronPDF 起价为 $749。免费体验其强大的 PDF 生成功能。 今天就试试,亲自感受不同之处。!

< 前一页
Ramda JS NPM(为开发人员的工作原理)
下一步 >
Multer Node.js(开发者如何使用)

准备开始了吗? 版本: 2024.9 刚刚发布

免费 npm 安装 查看许可证 >