> ## Documentation Index
> Fetch the complete documentation index at: https://firecrawl.web3doc.top/llms.txt
> Use this file to discover all available pages before exploring further.

# Node

> Firecrawl Node SDK 是 Firecrawl API 的封装，帮助您轻松将网站转换为 markdown。

## 安装

要安装 Firecrawl Node SDK，您可以使用 npm：

```bash Node theme={null}
npm install @mendable/firecrawl-js
```

## 使用

1. 从 [firecrawl.dev](https://firecrawl.dev) 获取一个 API key。
2. 将 API key 设置为环境变量 `FIRECRAWL_API_KEY` 或将其作为参数传递给 `FirecrawlApp` 类。

以下是一个如何使用 SDK 并处理错误的示例：

```js Node theme={null}
import FirecrawlApp, { CrawlParams, CrawlStatusResponse } from '@mendable/firecrawl-js';

const app = new FirecrawlApp({apiKey: "fc-YOUR_API_KEY"});

// 抓取网站内容
const scrapeResponse = await app.scrapeUrl('https://firecrawl.dev', {
  formats: ['markdown', 'html'],
});

if (!scrapeResponse.success) {
  throw new Error(`抓取失败: ${scrapeResponse.error}`);
}

console.log(scrapeResponse);

// 爬取网站内容
const crawlResponse = await app.crawlUrl('https://firecrawl.dev', {
  limit: 100,
  scrapeOptions: {
    formats: ['markdown', 'html'],
  }
});

if (!crawlResponse.success) {
  throw new Error(`爬取失败: ${crawlResponse.error}`);
}

console.log(crawlResponse);
```

### 抓取 URL

要抓取单个 URL 并处理错误，请使用 `scrapeUrl` 方法。它接受 URL 作为参数，并返回抓取的数据作为字典。

```js Node theme={null}
// 抓取一个网站：
const scrapeResult = await app.scrapeUrl('firecrawl.dev', { formats: ['markdown', 'html'] });

if (!scrapeResult.success) {
  throw new Error(`抓取失败: ${scrapeResult.error}`);
}

console.log(scrapeResult);
```

### 爬取网站

要爬取网站并处理错误，请使用 `crawlUrl` 方法。它接受起始 URL 和可选参数作为参数。`params` 参数允许您指定爬取作业的其他选项，如最大爬取页面数、允许的域名和输出格式。

```js Node theme={null}
const crawlResponse = await app.crawlUrl('https://firecrawl.dev', {
  limit: 100,
  scrapeOptions: {
    formats: ['markdown', 'html'],
  }
})

if (!crawlResponse.success) {
  throw new Error(`Failed to crawl: ${crawlResponse.error}`)
}

console.log(crawlResponse)
```

### 异步爬取

要异步爬取网站，请使用 `crawlUrlAsync` 方法。它返回爬取作业的 `ID`，您可以用它来检查爬取作业的状态。它接受起始 URL 和可选参数作为参数。`params` 参数允许您指定爬取作业的其他选项，如最大爬取页面数、允许的域名和输出格式。

```js Node theme={null}
const crawlResponse = await app.asyncCrawlUrl('https://firecrawl.dev', {
  limit: 100,
  scrapeOptions: {
    formats: ['markdown', 'html'],
  }
});

if (!crawlResponse.success) {
  throw new Error(`Failed to crawl: ${crawlResponse.error}`)
}

console.log(crawlResponse)
```

### 检查爬取状态

要检查爬取作业的状态并处理错误，请使用 `checkCrawlStatus` 方法。它接受 `ID` 作为参数，并返回当前爬取作业的状态。

```js Node theme={null}
Node;
const crawlResponse = await app.checkCrawlStatus('<crawl_id>');

if (!crawlResponse.success) {
  throw new Error(`Failed to check crawl status: ${crawlResponse.error}`);
}

console.log(crawlResponse);
```

### 取消爬取

要取消异步爬取作业，请使用 `cancelCrawl` 方法。它接受异步爬取作业的 ID 作为参数，并返回取消状态。

```js Node theme={null}
const cancelCrawl = await app.cancelCrawl(id);
console.log(cancelCrawl);
```

### 映射网站

要映射网站并处理错误，请使用 `mapUrl` 方法。它接受起始 URL 作为参数，并返回映射的数据作为字典。

```js Node theme={null}
const mapResult = await app.mapUrl('https://firecrawl.dev');

if (!mapResult.success) {
  throw new Error(`Failed to map: ${mapResult.error}`);
}

console.log(mapResult);
```

### 使用 WebSockets 爬取网站

要使用 WebSockets 爬取网站，请使用 `crawlUrlAndWatch` 方法。它接受起始 URL 和可选参数作为参数。`params` 参数允许您指定爬取作业的其他选项，如最大爬取页面数、允许的域名和输出格式。

```js Node theme={null}
const watch = await app.crawlUrlAndWatch('mendable.ai', { excludePaths: ['blog/*'], limit: 5});

watch.addEventListener("document", doc => {
  console.log("DOC", doc.detail);
});

watch.addEventListener("error", err => {
  console.error("ERR", err.detail.error);
});

watch.addEventListener("done", state => {
  console.log("DONE", state.detail.status);
});
```

## 错误处理

SDK 处理由 Firecrawl API 返回的错误，并引发适当的异常。如果在请求过程中发生错误，将会引发带有描述性错误消息的异常。上面的示例展示了如何使用 `try/catch` 块处理这些错误。
