我已经实现了一个express服务器,它使用express.static来服务从静态docusaurus站点创建的build文件夹,以便应用基本身份验证来访问该站点。这在本地运行得很好,但在部署到Vercel时遇到了麻烦。
目前,我的配置允许vercel上的部署版本呈现基本的身份验证登录页面,但在成功登录后,我被定向到一个页面,该页面显示:“无法获取/”
我相信这可能是我的vercel.json配置或我的vercel模板设置的问题。
我的代码如下:
索引.mjs
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`);
马塞尔.杰森
{
"version": 2,
"builds": [{
"src": "./index.mjs",
"use": "@vercel/node"
}],
"routes": [{"handle": "filesystem"},
{
"src": "/.*",
"dest": "/"
}
]
}
软件包.json -启动脚本
"start": "node --experimental-modules index.mjs",
我的vercel模板设置为other,启动脚本设置为npm start。
如有任何想法,将不胜感激!
2条答案
按热度按时间ct2axkht1#
我也遇到过类似问题:提供一些静态内容并使用/API路由。在本地开发中一切正常,但在vercel中抛出“Cannot GET/”。
我的解决方案。
我最后的
vercel.json
:备注
1.所有静态内容都在/public下(html、css、img、js等)
也许从这一点上你可以找到一个解决你的情况。
k2arahey2#
好的,我一直在寻找这个问题的解决方案,结果发现我们必须在express中显式地提供index.html:
因为您可能在公共文件夹中有index.html。这就为我解决了这个问题。