无法使用 ExpressJS 和 Zeit Now 访问静态公共文件夹('now dev')

tom*_*gun 5 node.js express vercel

我创建了一个带有车把模板引擎的 ExpressJS 应用程序,并且通过以下方式启动应用程序npm start对我来说看起来一切都很好,因为所有资源都已加载。

这是我的文件夹结构

- public
  - css
  - svg
  - uploads
- views
  - layouts
  > home.handlebars
Run Code Online (Sandbox Code Playgroud)

这是我的index.js的相关内容:

const express = require('express');
const exphbs = require('express-handlebars');
const path = require('path');
const fs = require('fs');
const port = 5000;
const index = express();


app.set('views', path.join(__dirname, '/', 'views'));
app.use(express.static(__dirname + '/public'));
app.engine('handlebars', exphbs({
    defaultLayout: 'main',
    layoutsDir: path.join(__dirname, '/', 'views', 'layouts')}
));
app.set('view engine', 'handlebars');
Run Code Online (Sandbox Code Playgroud)

这是我的now.json的内容:

{
    "version": 2,
    "builds": [
        {
            "src": "index.js",
            "use": "@now/node-server"
        }
    ],
    "routes": [
        {
            "src": "/",
            "dest": "/",
            "methods": ["GET"]
        },
        {
            "src": "/justaroute",
            "dest": "/",
            "methods": ["POST"]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

问题

正如我上面所说,使用npm start显示了我的工作应用程序,但使用now dev我的应用程序找不到任何资产(在控制台中显示 404): http://localhost:3000/css/icons.css net::ERR_ABORTED 404 (Not Found) http://localhost:3000/uploads/[...].jpg 404 (Not Found)

看起来

app.set('views', path.join(__dirname, '/', 'views'));
Run Code Online (Sandbox Code Playgroud)

正在将视图路径设置为视图正在加载的资源的根目录。

在视图中,我加载如下资源:

<link rel="stylesheet" type="text/css" href="css/icons.css">
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加/public/[...]到资产 href 并通过添加显式获取公共文件夹app.set('public', path.join(__dirname, '/', 'public'));,这导致 Chrome 仍然找不到资产:http://localhost:3000/public/css/icons.css net::ERR_ABORTED 404 (Not Found)

nfo*_*rd8 3

我设法用下面的代码让这个为我自己工作。您必须在 now.json 的构建和路由中提供资产文件夹。我在节点中提供文件,没有任何问题 404,所以我最终确认这是某种 Zeit 配置问题。

如果使用“now dev”命令运行此命令,那么在部署到生产环境时可以确定它会正常工作。

铌。我的资产文件夹是嵌套的,因为当我的新网站启动并运行时,该网站将被存档,因此它被放置在“存档”子目录中。将此更改为适合您需要的任何内容。

./index.js

var express = require('express');
var server = express();
server.use('/', express.static('/src/archive'));
server.listen(8080);
Run Code Online (Sandbox Code Playgroud)

./now.json

{
  "version": 2,
  "builds": [
    {
      "src": "src/archive/**",
      "use": "@now/static"
    },
    {
      "src": "*.js",
      "use": "@now/node-server"
    }
  ],
  "routes": [
    {
      "src": "/",
      "dest": "src/archive/index.html"
    },
    {
      "src": "/(.+)",
      "dest": "src/archive/$1"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)