这篇文章也可以在我的博客上找到:https://hamidreza.tech/nestjs-on-vercel。
如果您使用 Express 适配器,本指南会很有帮助。对于使用 Fastify 适配器的 NestJS 应用程序,这些链接可能会有所帮助:
https://fastify.dev/docs/latest/Guides/Serverless/#vercel
https://github.com/vercel/examples/tree/main/starter/fastify
?您可以在此 GitHub 存储库中访问本文中讨论的完整源代码:https://github.com/mahdavipanah/nestjs-on-vercel
Vercel 对 Express 应用程序的支持
Vercel 提供了一项便捷的功能,用于通过以下方式部署 Express 应用程序:
在 API 中公开 Express 应用对象。
定义一个重写规则,将所有传入流量定向到此单个 API。
我按照 Vercel 的官方 Express 部署指南来部署 NestJS,方法类似地公开 NestJS 的底层 Express 应用对象。
第 1 步 - 创建一个 NestJS 应用程序
如果您已经设置了 NestJS 应用,请跳过此步骤。
安装 NestJS 并创建一个新应用程序:
nest new my-app
第 2 步 - 安装必要的 NPM 软件包
npm install express @nestjs/platform-express npm install -D @types/express
步骤 3 - 创建 src/AppFactory.ts 文件
此文件用作管理所有必要的 NestJS 应用程序引导的单个模块,并导出 NestJS 应用程序及其底层 Express 应用程序对象。
在项目根目录的 src 目录中创建一个名为 AppFactory.ts 的文件:
import { ExpressAdapter } from '@nestjs/platform-express'; import { NestFactory } from '@nestjs/core'; import express, { Request, Response } from 'express'; import { Express } from 'express'; import { INestApplication } from '@nestjs/common'; import { AppModule } from './app.module.js'; export class AppFactory { static create(): { appPromise: Promise<inestapplication>>; expressApp: Express; } { const expressApp = express(); const adapter = new ExpressAdapter(expressApp); const appPromise = NestFactory.create(AppModule, adapter); appPromise .then((app) => { // You can add all required app configurations here /** * Enable cross-origin resource sharing (CORS) to allow resources to be requested from another domain. * @see {@link https://docs.nestjs.com/security/cors} */ app.enableCors({ exposedHeaders: '*', }); app.init(); }) .catch((err) => { throw err; }); // IMPORTANT This express application-level middleware makes sure the NestJS app is fully initialized expressApp.use((req: Request, res: Response, next) => { appPromise .then(async (app) => { await app.init(); next(); }) .catch((err) => next(err)); }); return { appPromise, expressApp }; } } </inestapplication>
第 4 步 - 修改 src/main.ts 文件
默认情况下,NestJS 有一个 src/main.ts 文件作为应用程序的入口点,包括所有配置和引导。修改此文件以将所有内容移动到 AppFactory.ts 文件中,仅保留监听方法的调用:
import { AppFactory } from './AppFactory.js'; async function bootstrap() { const { appPromise } = AppFactory.create(); const app = await appPromise; await app.listen(process.env.PORT ?? 3000); } bootstrap();
第 5 步 - 添加 api/index.ts 文件
默认情况下,Vercel 运行时会构建项目的 /api 目录中创建的任何函数并将其提供给 Vercel (doc)。由于 Vercel 理解并处理 Express 应用程序对象,因此在此目录中创建一个导出 Express 应用程序对象的函数:
/** * This file exports Express instance for specifically for the deployment of the app on Vercel. */ import { AppFactory } from '../src/AppFactory.js'; export default AppFactory.create().expressApp;
第 6 步 - 添加 vercel.json 文件
在项目根目录下创建一个名为 vercel.json 的文件来配置 Vercel。在这里,为 Vercel 定义一个重写规则,以使用 Express 应用来服务所有传入流量 (doc)。
您还可以使用 api 目录中的 tsconfig.json 文件来配置 Vercel 的 TypeScript 编译器。除了 “路径映射” 和 “Pr对象参考s” 之外,大多数选项均受支持。
nest new my-app
第 7 步 - 在 Vercel 上创建项目
恭喜?!我们快完成了。现在,创建一个 git 存储库并将源代码推送到其中。然后,转到您的 Vercel 帐户,创建一个新项目,并导入 git 存储库。您还可以使用本文的示例 GitHub 存储库。
以上是Vercel 上快速、简单的 NestJS 应用程序部署的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

简单JavaScript函数用于检查日期是否有效。 function isValidDate(s) { var bits = s.split('/'); var d = new Date(bits[2] '/' bits[1] '/' bits[0]); return !!(d && (d.getMonth() 1) == bits[1] && d.getDate() == Number(bits[0])); } //测试 var

本文探讨如何使用 jQuery 获取和设置 DOM 元素的内边距和外边距值,特别是元素外边距和内边距的具体位置。虽然可以使用 CSS 设置元素的内边距和外边距,但获取准确的值可能会比较棘手。 // 设置 $("div.header").css("margin","10px"); $("div.header").css("padding","10px"); 你可能会认为这段代码很

本文探讨了十个特殊的jQuery选项卡和手风琴。 选项卡和手风琴之间的关键区别在于其内容面板的显示和隐藏方式。让我们深入研究这十个示例。 相关文章:10个jQuery选项卡插件

发现十个杰出的jQuery插件,以提升您的网站的活力和视觉吸引力!这个精选的收藏品提供了不同的功能,从图像动画到交互式画廊。让我们探索这些强大的工具: 相关文章: 1

HTTP-Console是一个节点模块,可为您提供用于执行HTTP命令的命令行接口。不管您是否针对Web服务器,Web Serv

本教程向您展示了如何将自定义的Google搜索API集成到您的博客或网站中,提供了比标准WordPress主题搜索功能更精致的搜索体验。 令人惊讶的是简单!您将能够将搜索限制为Y

当div内容超出容器元素区域时,以下jQuery代码片段可用于添加滚动条。 (无演示,请直接复制到Firebug中) //D = document //W = window //$ = jQuery var contentArea = $(this), wintop = contentArea.scrollTop(), docheight = $(D).height(), winheight = $(W).height(), divheight = $('#c


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Dreamweaver CS6
视觉化网页开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中