You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Netlify上使用Node.js部署Express应用时无法发送HTML文件

在Netlify部署Express Node.js应用解决文件找不到问题

问题描述

部署基于Express的Node.js应用到Netlify后,访问任意页面都报错:

Error: ENOENT: no such file or directory, stat '/var/task/data.html'

相关代码与配置如下:

server.js

const express = require("express")
const path = require("path")
const bodyParser = require("body-parser")

const app = express()

app.use(bodyParser.urlencoded({extended: false}))


app.get("/", (req, res) => {
    res.sendFile(path.join(process.cwd(), "index.html"))
})
app.get("/js", (req, res) => {
    res.sendFile(path.join(process.cwd(), 'index.js'))
})
app.get("/css", (req, res) => {
    res.sendFile(path.join(process.cwd(), 'index.css'))
})

app.get("/data", (req, res) => {
    res.sendFile(path.join(process.cwd(), "data.html"))
})


data = {}

app.post("/data/input", (req, res)=>{
    let dataPkg = req.body
    
    data[dataPkg.id] = dataPkg.name

})

app.post("/data/output", (req, res)=>{

    res.send(data)

})


module.exports = {app};

netlify.toml

[build]
    publish = "dist"
    functions = "netlify/functions"
[functions]
    external_node_modules = ["express", "path", "body-parser"]
[[redirects]]
    force = true
    status = 200
    from = "/*"
    to = "/.netlify/functions/index"

解决方案

问题核心是Netlify Functions运行目录与本地不一致:process.cwd()在Netlify函数环境中指向/var/task(函数执行目录),但你的静态文件并不在该目录下。

1. 修正静态文件路径计算

将process.cwd()替换为__dirname,并根据目录结构调整相对路径。假设server.js位于项目根目录,修改后的关键代码如下:

// 替换所有path.join(process.cwd(), ...)为以下格式
app.get("/", (req, res) => {
    res.sendFile(path.join(__dirname, "index.html"))
})
app.get("/js", (req, res) => {
    res.sendFile(path.join(__dirname, 'index.js'))
})
app.get("/css", (req, res) => {
    res.sendFile(path.join(__dirname, 'index.css'))
})

app.get("/data", (req, res) => {
    res.sendFile(path.join(__dirname, "data.html"))
})

如果server.js是被导入到netlify/functions/index.js中运行,需调整为上级目录路径:path.join(__dirname, "../index.html")

2. 确保静态文件被部署

  • 检查.gitignore文件,不要忽略index.html、index.js、index.css、data.html等静态文件,确保它们被提交到Git仓库;
  • 若publish目录设为dist,需在构建命令中把静态文件复制到dist目录,同时调整函数路径为path.join(__dirname, "../dist/index.html")

3. 注意Netlify Functions的无状态性

代码中全局变量data存储的数据会在每次请求后丢失(Netlify Functions每次请求都会重新初始化),如需持久化数据,建议使用第三方数据库或Netlify自带的Storage服务。

4. 优化netlify.toml配置(可选)

若无需单独的静态资源发布目录,可将publish设为项目根目录,或直接删除publish配置(Netlify默认使用根目录),简化路径管理。

验证部署

修改完成后,重新通过Netlify CLI部署:

netlify deploy --prod

内容的提问来源于stack exchange,提问作者AdiCo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 21:52:31