create-nodeapi-backend
Version:
A powerful Node.js backend boilerplate with Express, MongoDB, Firebase, JWT auth, Nodemailer, cron jobs, input validation (Joi), and serverless support for Vercel. Scaffold a full-featured API backend in seconds.
78 lines (61 loc) • 1.92 kB
JavaScript
require("dotenv").config();
const express = require("express");
const app = express();
const session = require("express-session");
const passport = require("passport");
const morgan = require("morgan");
const bodyParser = require("body-parser");
const path = require("path");
const cors = require("cors");
global.router = express.Router();
global.catchAsync = require("./utils/catchAsync");
global.getId = require("./utils/getId");
global.statusCodeMap = require("./utils/statusCode");
global.formatResponse = require("./utils/responseFormatter");
global.handleResponse = require("./utils/handleResponse");
global.httpStatus = require("http-status");
const config = require("./config/index");
const routes = require("./route/v1/index");
require("./lib/firebase");
require("./lib/smtp");
const { connectToDatabase } = require("./lib/database");
app.use(cors());
app.use((req, res, next) => {
res.header("Access-Control-Allow-Headers", "Origin, Content-Type, Accept");
next();
});
app.use(
session({
secret: "myBigSecret",
resave: false,
saveUninitialized: true,
cookie: { secure: false }
})
);
if (config.env !== "prod" && config.env !== "test") {
app.use(
morgan("combined", {
stream: {
write: (message) => {
// Log to a file or external service
console.log(message.trim());
}
}
})
);
}
app.use(passport.initialize());
app.use(passport.session());
app.use(express.json({ limit: "50mb" }));
app.use(express.urlencoded({ limit: "50mb", extended: true }));
connectToDatabase();
app.use((req, res, next) => {
// console.log(`Request size: ${req.headers['content-length']} bytes`);
// console.log(`Headers:`, req.headers);
next();
});
app.get("/", (req, res) => {
res.send("Hello, World!");
});
app.use("/v1", routes);
module.exports = app;