Nuxt 和 Express 服务器在生产 /dist 中没有收到 api 请求
Nuxt & Express server not getting api requests in production /dist
我有一个 Nuxt 应用程序 运行 在我的本地服务器上成功,并且所有 API 请求都从同一服务器成功 运行ning(使用 serverMiddleware 属性在 nuxt.config.js
中)。当我运行一个yarn generate
时,API服务器的路径丢失,没有数据加载。下面是一些截图。
从 API 成功加载数据。
找不到API
这是 project_dir api/index.js 文件中 api 调用的示例
const express = require("express");
const passport = require("passport");
const allRoutes = require("../api/routes/routes");
const guestRoutes = require("../api/routes/guest");
const fileUpload = require("express-fileupload");
const path = require("path");
// Create express instance
const app = express();
// Init body-parser options (inbuilt with express)
app.use(express.json());
app.use(fileUpload());
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, "../", "dist")));
/**
* -------------- PASSPORT AUTHENTICATION ----------------
*/
// Need to require the entire Passport config module so index.js knows about it
require("./config/passport-jwt");
// Initialize Passport
app.use(passport.initialize());
/**
* -------------- ROUTES ----------------
*/
// Imports all of the routes from ./routes/index.js
app.use(guestRoutes);
app.use(passport.authenticate("jwt", { session: false }), allRoutes);
console.log("express");
console.log(path.join(__dirname, "../", "dist"));
app.get("*", (req, res) => {
res.sendFile(path.join(__dirname, "../", "dist", "index.html"));
});
// Export express app
module.exports = app;
我不知道为什么我无法从我 运行 在同一台服务器上的 API 路由获取数据。
这里有一个 in-depth 关于如何 运行 与 Nuxt 一起使用 Express 服务器的答案:
首先要知道的是,您不能使用 yarn generate
的 Node.js 服务器,因为它使用的是 target: 'static'
并且您可以猜到,当某些东西是静态的时,它不会'不需要 Node.js 服务器服务于 end-user(仅 html
+ css
+ js
static文件托管在 CDN 或类似网站上)。
此模式旨在将代码托管在 Netlify、Vercel 或类似平台上,那里没有可用的 Node.js 服务器。
为什么它在本地工作?因为您确实有一个 Webpack 开发服务器 运行ning(带有一个 Node.js 服务器)用于调试目的,例如 HMR 等...
TDLR:这是正常的(到目前为止按预期工作)。关于上面给定的 link 如何使其工作的更多信息。
经过大量研究和调试,我想出了一个新主意。
而不是 运行 npm run start
或 yarn start
在 package.json 文件中包含脚本 "nuxt start"
。我添加了一个名为 "express-start": "cross-env NODE_ENV=production node api/index.js"
的新脚本。它运行快速服务器和 nuxt 静态文件。
我目前正在创建一个模板,以方便那些将面临这一挑战的人。完成后我会添加 link。
我有一个 Nuxt 应用程序 运行 在我的本地服务器上成功,并且所有 API 请求都从同一服务器成功 运行ning(使用 serverMiddleware 属性在 nuxt.config.js
中)。当我运行一个yarn generate
时,API服务器的路径丢失,没有数据加载。下面是一些截图。
从 API 成功加载数据。
找不到API
这是 project_dir api/index.js 文件中 api 调用的示例
const express = require("express");
const passport = require("passport");
const allRoutes = require("../api/routes/routes");
const guestRoutes = require("../api/routes/guest");
const fileUpload = require("express-fileupload");
const path = require("path");
// Create express instance
const app = express();
// Init body-parser options (inbuilt with express)
app.use(express.json());
app.use(fileUpload());
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, "../", "dist")));
/**
* -------------- PASSPORT AUTHENTICATION ----------------
*/
// Need to require the entire Passport config module so index.js knows about it
require("./config/passport-jwt");
// Initialize Passport
app.use(passport.initialize());
/**
* -------------- ROUTES ----------------
*/
// Imports all of the routes from ./routes/index.js
app.use(guestRoutes);
app.use(passport.authenticate("jwt", { session: false }), allRoutes);
console.log("express");
console.log(path.join(__dirname, "../", "dist"));
app.get("*", (req, res) => {
res.sendFile(path.join(__dirname, "../", "dist", "index.html"));
});
// Export express app
module.exports = app;
我不知道为什么我无法从我 运行 在同一台服务器上的 API 路由获取数据。
这里有一个 in-depth 关于如何 运行 与 Nuxt 一起使用 Express 服务器的答案:
首先要知道的是,您不能使用 yarn generate
的 Node.js 服务器,因为它使用的是 target: 'static'
并且您可以猜到,当某些东西是静态的时,它不会'不需要 Node.js 服务器服务于 end-user(仅 html
+ css
+ js
static文件托管在 CDN 或类似网站上)。
此模式旨在将代码托管在 Netlify、Vercel 或类似平台上,那里没有可用的 Node.js 服务器。
为什么它在本地工作?因为您确实有一个 Webpack 开发服务器 运行ning(带有一个 Node.js 服务器)用于调试目的,例如 HMR 等...
TDLR:这是正常的(到目前为止按预期工作)。关于上面给定的 link 如何使其工作的更多信息。
经过大量研究和调试,我想出了一个新主意。
而不是 运行 npm run start
或 yarn start
在 package.json 文件中包含脚本 "nuxt start"
。我添加了一个名为 "express-start": "cross-env NODE_ENV=production node api/index.js"
的新脚本。它运行快速服务器和 nuxt 静态文件。
我目前正在创建一个模板,以方便那些将面临这一挑战的人。完成后我会添加 link。