运行
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 站点上的产品上部署。
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