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 startyarn start 在 package.json 文件中包含脚本 "nuxt start"。我添加了一个名为 "express-start": "cross-env NODE_ENV=production node api/index.js" 的新脚本。它运行快速服务器和 nuxt 静态文件。 我目前正在创建一个模板,以方便那些将面临这一挑战的人。完成后我会添加 link。