目前,我在使用“netlify-cli”的“手动”方式将我的 Node js 应用程序部署到 Netlify 时遇到一些麻烦。
我的所有主要代码都在“index.js”中,如下所示:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(express.json());
app.use(cors());
app.get('/test', (req, res) => {
res.send('Connected to backend server!')
})
const route = require('./routes');
app.use('/income', route.incomeAPI);
app.use('/expense', route.expanseAPI);
app.listen(3000, () => console.log('Successfully connected to server!'));
我的所有 API 路由都包含在“route”文件夹中。
我遵循了很多教程和网站,但仍然无法部署。
谢谢和问候, 艾曼·伊尔凡
当您在 Netlify 上将 Express 应用程序部署为无服务器功能时,您必须将
express
应用程序包装到 serverless-http
模块中。
让我们看看
安装以下依赖项
npm i express serverless-http
在您的基本文件夹中创建
app.js
。
// YOUR_BASE/app.js
const express = require('express');
const cors = require('cors');
const routes = require('./routes');
const app = express();
const router = express.Router();
app.use(express.json());
app.use(cors());
router.get('/test', (req, res) => {
res.send('Connected to backend server!');
});
router.use('/income', routes.incomeAPI);
router.use('/expense', routes.expanseAPI);
app.use('/api',router)
module.exports = app;
在基本文件夹中创建另一个名为
app.local.js
的文件用于本地开发,因为我们无法在本地使用无服务器模块,因此我们在单独的模块中拥有 app
并重用它们。
// YOUR_BASE/app.local.js
const app = require('./app');
app.listen(3000, () => console.log('Successfully connected to server!'));
您可以使用此文件进行开发
您必须将
function
文件夹放入netlify
文件夹中,这样路径就是YOUR_BASE/netlify/function/api.js
最后在函数文件夹中创建新的
api.js
并添加这个
const serverless = require('serverless-http');
const app = require('../../app.js');
module.exports.handler = serverless(app);
在您的
netlify.toml
文件中添加以下配置。
[functions];
external_node_modules = ['express'];
node_bundler = 'esbuild'[[redirects]];
force = true;
from = '/api/*';
status = 200;
to = '/.netlify/functions/api/:splat';
最后手动部署
netlify deploy
奖金
如果您仍然遇到问题,请尝试将
CommonJS
转换为ES Module
,使用ESM
将是一个很好的做法