@astrojs/ node
此适配器允许 Astro 将你的 按需渲染路由 (EN)部署到 Node 目标。
如果你将 Astro 用作静态站点构建器,则不需要适配器。
为什么选择 Astro Node.js
段落标题 为什么选择 Astro Node.jsNode.js 是用于服务器端代码的 JavaScript 运行时。 @astrojs/node 可以在独立模式下使用,也可以作为其他 http 服务器(例如 Express)的中间件。
安装
段落标题 安装Astro 包含了一个 astro add
命令,用于自动设置官方集成。如果你愿意,可以改为手动安装集成。
使用 astro add
命令将 Node 适配器添加到你的 Astro 项目中,以启用服务端渲染。
这将一步安装 @astrojs/node
并对你的 astro.config.*
文件进行适当的修改。
手动安装
段落标题 手动安装首先,使用适合你的包管理器将 Node 适配器添加到你的项目依赖中。
然后,将适配器和你所需的按需渲染模式 (EN)添加到你的 astro.config.*
文件中:
配置
段落标题 配置@astrojs/node 可以通过将选项传递给适配器函数来配置。以下选项可用:
模式
段落标题 模式控制适配器是构建为 middleware
模式还是 standalone
模式。
-
middleware
模式允许将构建的输出用作另一个 Node.js 服务器的中间件,例如 Express.js 或 Fastify。 -
standalone
构建到服务器,随着入口模块的运行会自动启动。这使你可以更轻松地部署到主机,而无需任何额外的代码。
用法
段落标题 用法首先,执行构建。根据选择的模式(见上文),执行以下相应的步骤:
中间件
段落标题 中间件服务器入口文件默认构建为 ./dist/server/entry.mjs
。该模块导出一个 处理程序(handler)
函数,可以与任何支持 Node 请求(request)
和 响应(response)
对象的框架一起使用。
例如,使用 Express:
或者使用 Fastify (>4):
此外,你还可以传入一个对象,以便使用 Astro.locals
或 Astro 中间件访问该对象:
请注意,中间件模式不提供文件服务。你需要配置 HTTP 框架来完成这项工作。默认情况下,客户端资产写入 ./dist/client/
。
独立
段落标题 独立在独立模式下,服务器在入口文件运行时启动。默认情况下,它被构建为 ./dist/server/entry.mjs
。你可以运行它:
对于独立模式,服务器除了处理页面和 API 路由之外还处理文件服务。
自定义主机和端口
段落标题 自定义主机和端口你可以覆盖独立服务器运行的主机和端口,通过在运行时将它们作为环境变量进行传递:
HTTPS
段落标题 HTTPS默认情况下,独立服务器使用 HTTP。如果前面有一个执行 HTTPS 的代理服务器,则能更好的工作。如果你需要独立服务器本身来运行 HTTPS,你需要提供 SSL 密钥和证书。
你可以通过环境变量 SERVER_CERT_PATH
和 SERVER_KEY_PATH
传递密钥和证书的路径。这就是在 bash 中传递它们的方式:
运行时环境变量
段落标题 运行时环境变量如果在构建过程运行时存在包含环境变量的 .env
文件,这些值将会被硬编码到输出中,就像生成静态网站一样。
在构建过程中,运行时变量必须不存在于 .env
文件中,并且你必须为 Astro 提供每个运行时期望的环境变量: VARIABLE_1=placeholder astro build
。这会向 Astro 指示实际值将在构建的应用程序运行时可用。占位符值将被构建过程忽略,Astro 将在运行时使用提供的值。
如果使用多个运行时变量,请将它们保存在与 .env
不同的独立文件(如 .env.runtime
)中。使用以下命令开始构建:
资源文件
段落标题 资源文件在独立模式下,你的 dist/client/
文件夹中的资源文件将通过独立服务器提供服务。但你可能会将这些资源部署到 CDN 上,在这种情况下,服务器实际上则不会为它们提供服务。但是在某些情况下,比如内网站点,直接从应用服务器提供静态资源文件则是可行的。
dist/client/_astro/
文件夹中的资源文件由 Astro 构建。这些资源文件都是带有哈希命名的,因此可以设置长时间的缓存标头。所以在内部,适配器为这些资源添加了如下的标头信息: