如何在 Netlify 上部署 Node.js?

问题描述 投票:0回答:1

运行

netlify dev
命令时,未找到
test
中的端点(
create
user/routes.js
)(404)。所以我无法在生产中部署。

|---.git
|---.gitignore
|---src
|   |---user
|   |   |---controller.js  (ignore this part)
|   |   |---routes.js
|   |---app.js
|   |---config.js
|   |---routes.js
|---.env.dev.sample
|---package.json

这些文件的内容如下所示。

src/user/routes.js:

import express from 'express';
import { create } from './controller.js';

const router = express.Router();

router.get('/create', create);

router.get('/test', (req, res) => {
  res.send("Test page for netlify hosting");
});

export default router;

src/app.js:

import express from 'express';
import cors from 'cors';
import { APP_PORT } from './config.js';
import router from './routes.js';
import serverless from 'serverless-http';

const app = express();

app.listen(APP_PORT, () => {
  console.log(`Server is running on port ${APP_PORT}`);
});

app.use(express.json({ limit: '5mb' }));
app.use(cors());

app.use('/api/v1', router);

app.use((req, res, next) => {
   res.status(404).json('The requested resource was not found on this server');
});

export default serverless(app);

src/config.js:

import dotenv from 'dotenv';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
import path from 'path';

const envConfigFile = process.env;

if (envConfigFile.NODE_ENV !== 'prod') {
    const __filename = fileURLToPath(import.meta.url);
    const __dirname = dirname(__filename);
    
    const configFile = path.resolve(__dirname, '../.env.sample');
    dotenv.config({ path: configFile, encoding: 'utf-8' });
}

const { APP_PORT } = envConfigFile;

export { APP_PORT };

src/routers.js:

import { Router } from 'express';
import userRoutes from './user/routes.js';

const router = Router();

router.use('/user', userRoutes);

export default router;

.env.dev.sample:

APP_PORT = "yourAppPort"

package.json:

{
    "version": "1.0.0",
    "description": "",
    "type": "module",
    "engines": {
        "node": "20.18.0",
        "npm": "10.8.2"
    },
    "main": "src/app.js",
    "scripts": {
        "start": "cross-env NODE_ENV=prod node src/app.js",
        "devStart": "cross-env NODE_ENV=dev nodemon src/app.js"
    },
    "author": "",
    "license": "",
    "homepage": "",
    "devDependencies": {
        "cross-env": "7.0.3",
        "nodemon": "3.1.9"
    },
    "dependencies": {
        "cors": "2.8.5",
        "dotenv": "16.4.7",
        "express": "4.21.2",
        "serverless-http": "^3.2.0"
    }
}

已经尝试这个。我仍然无法在本地和 Netlify 站点上的产品上部署。

node.js netlify
1个回答
0
投票

Netlify 主要针对静态站点和无服务器功能而设计。您可以部署 Express 项目,但不能部署 Node.js,也不能运行自己的 Express 服务器。

但是 Netlify 允许您运行 Express 项目。 这是 Netlify 的起点,您的 Express 项目将在此处加载:

netlify/functions/api/js

import serverless from "serverless-http";
import router from '../../src/routes.js';
import express from 'express';

export const app = express();

app.use('/api/v1', router);

app.use((req, res, next) => {
    res.status(404).json('The requested resource was not found on this server');
});

export const handler = serverless(app);

因此,如果您将该文件添加到您的项目中,它应该可以正常工作。

Netlify 中的部署结果:https://test-express-deployment.netlify.app/api/v1/user/test

具有固定代码的仓库:https://github.com/Borewit/test-netlify-express

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.