代码:部署节点应用程序时 Vercel 中 NOT_FOUND

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

这是我的app.js

const path = require("path");
const express = require("express");
const mongoose = require("mongoose");
const dotenv = require("dotenv");
const morgan = require("morgan");
const exphbs = require("express-handlebars");
const methodOverride = require("method-override");
const passport = require("passport");
const session = require("express-session");
const MongoStore = require("connect-mongo");
const connectDB = require("./config/db");

// Load config
dotenv.config({ path: "./config/config.env" });

// Passport Config
require("./config/passport")(passport);

connectDB();

const app = express();

// Body Parser
app.use(express.urlencoded({ extended: false }));
app.use(express.json());

// Method Override
app.use(
  methodOverride(function (req, res) {
    if (req.body && typeof req.body === "object" && "_method" in req.body) {
      // look in urlencoded POST bodies and delete it
      let method = req.body._method;
      delete req.body._method;
      return method;
    }
  })
);

// Logging
if (process.env.NODE_ENV === "development") {
  app.use(morgan("dev"));
}

// Handlebars Helpers

const {
  formatDate,
  stripTags,
  truncate,
  editIcon,
  select,
} = require("./helpers/hbs");

// Handlebars
app.engine(
  ".hbs",
  exphbs.engine({
    helpers: {
      formatDate,
      stripTags,
      truncate,
      editIcon,
      select,
    },
    defaultLayout: "main",
    extname: ".hbs",
  })
);
app.set("view engine", ".hbs");

// Session middleware
app.use(
  session({
    secret: "keyboard cat",
    resave: false,
    saveUninitialized: false,
    store: MongoStore.create({ mongoUrl: process.env.MONGO_URI }),
  })
);

// Passport middleware
app.use(passport.initialize());
app.use(passport.session());

// Set Global Variable
app.use(function (req, res, next) {
  res.locals.user = req.user || null;
  next();
});

// Static Folder
app.use(express.static(path.join(__dirname, "public")));

// Routes

app.use("/", require("./routes/index"));
app.use("/auth", require("./routes/auth"));
app.use("/stories", require("./routes/stories"));

const PORT = process.env.PORT || 3000;

app.listen(
  PORT,
  console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`)
);

当我部署此节点应用程序时,我收到来自 vercel 的页面未找到错误。 该节点应用程序在后端使用express。我无法部署这个应用程序。

我尝试创建 vercel.json 文件

{
  "version": 2,
  "builds": [{ "src": "package.json", "use": "@vercel/node" }],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "app.js"
    }
  ],
  "env": {
    "NODE_ENV": "development",
    "MONGO_URI": "mongodb+srv://josh19ab:[email protected]/storybooks?retryWrites=true&w=majority&appName=Cluster0",
    "SESSION_SECRET": "keyboard cat"
  }
}

还是没用。 我认为 vercel 没有检测到我在 app.js 中定义的路由 StoryBooks 是一个简单的 Nodejs 应用程序。部署时索引页面未加载到 vercel 中。我不知道解决这个问题。

node.js express vercel
1个回答
0
投票

这是 vercel.json 的更新代码

{
  "version": 2,
  "builds": [
    {
      "src": "app.js",
      "use": "@vercel/node"
    }
  ],
  "rewrites": [{ "source": "/(.*)", "destination": "/app.js" }]
}
© www.soinside.com 2019 - 2024. All rights reserved.