这是我的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 中。我不知道解决这个问题。
这是 vercel.json 的更新代码
{
"version": 2,
"builds": [
{
"src": "app.js",
"use": "@vercel/node"
}
],
"rewrites": [{ "source": "/(.*)", "destination": "/app.js" }]
}