首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将使用express.static为构建文件夹提供服务的快捷服务器部署到Vercel

将使用express.static为构建文件夹提供服务的快捷服务器部署到Vercel
EN

Stack Overflow用户
提问于 2022-05-05 20:20:41
回答 1查看 715关注 0票数 0

我已经实现了一个快速服务器,它使用express.static为从静态文档库站点创建的构建文件夹提供服务,以便应用基本身份验证访问站点。这在本地运行得很好,但是我在部署到Vercel时遇到了麻烦。

目前,我的配置允许在vercel上部署的版本呈现基本的auth登录页面,但是在成功登录时,我被定向到一个页面,状态是:“无法获取/”

我相信这可能是我的vercel.json配置或vercel模板设置的一个问题。

我的代码如下:

index.mjs

代码语言:javascript
复制
import express from 'express';
import dotenv from 'dotenv';

dotenv.config();

const app = express();

app.use(express.json());

const authorize = ((req, res, next) => {

    const auth = {login: process.env.USERNAME, password: process.env.PASSWORD}

  
    const b64auth = (req.headers.authorization || '').split(' ')[1] || ''
    const [login, password] = Buffer.from(b64auth, 'base64').toString().split(':')
  
    
    if (login && password && login === auth.login && password === auth.password) {
     
      return next()
    }
  
    res.set('WWW-Authenticate', 'Basic realm="401"') 
    res.status(401).send('Authentication required.') 
});

app.use('/', authorize);
app.use('/', express.static('build'));

app.listen(3000);
console.log(` Server ready at http://localhost:3000`);

vercel.json

代码语言:javascript
复制
{
  "version": 2,
  "builds": [{
    "src": "./index.mjs",
    "use": "@vercel/node"
  }],
  "routes": [{"handle": "filesystem"},
    {
      "src": "/.*",
      "dest": "/"
    }
  ]
  

}

package.json -启动脚本

代码语言:javascript
复制
"start": "node --experimental-modules index.mjs",

我的vercel模板被设置为other,start脚本设置为npm。

任何想法都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2022-07-15 20:09:13

我也有类似的问题:提供一些静态内容并使用/api路由。所有这些都在本地开发中工作得很好,但是在vercel中抛出的“不能得到/”。

我的解决方案。

  • 分别构建无服务器内容和静态内容。用于/api调用和静态内容的
  • 路由调整。

我的最后一个vercel.json

代码语言:javascript
复制
{
    "version": 2,
    "builds": [
        {
            "src": "server.js",
            "use": "@vercel/node"
        },
        {
            "src": "public/**",
            "use": "@vercel/static"
        }
    ],
    "routes":[
        {
            "src": "/api/(.*)",
            "dest": "server.js"
        },
        {
            "src": "/",
            "dest": "public/index.html"
        },
        {
            "src": "/(.+)",
            "dest": "public/$1"
        }
    ]
}

备注

所有静态内容都在etc)

  • server.js下(html、css、img、js、etc)

  • server.js是主要应用程序:快递和路由定义)。类似于yours.

  • vercel构建日志显示:

代码语言:javascript
复制
Generated build outputs:    
12:28:55.974     - Static files: 12
12:28:55.974     - Serverless Functions: 1
12:28:55.975     - Edge Functions: 0
...
12:28:58.142    Done with "server.js"

也许从现在开始,你可以为你的案子找到一个解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72133185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档