Node.js v22.19.0
[nodemon] app crashed - waiting for file changes before starting...
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
[dotenv@17.2.3] injecting env (5) from .env -- tip:
Server is running on PORT 3000
connected to DB
node:_http_outgoing:700
throw new ERR_HTTP_HEADERS_SENT('set');
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (node:_http_outgoing:700:11)
at ServerResponse.header (C:\Users\Lenovo\OneDrive\Desktop\WanderlustProject\node_modules\express\lib\response.js:684:10)
at ServerResponse.contentType (C:\Users\Lenovo\OneDrive\Desktop\WanderlustProject\node_modules\express\lib\response.js:514:15)
at ServerResponse.send (C:\Users\Lenovo\OneDrive\Desktop\WanderlustProject\node_modules\express\lib\response.js:136:14)
at done (C:\Users\Lenovo\OneDrive\Desktop\WanderlustProject\node_modules\express\lib\response.js:905:10)
at renderTick (C:\Users\Lenovo\OneDrive\Desktop\WanderlustProject\node_modules\express\lib\view.js:154:23)
at process.processTicksAndRejections (node:internal/process/task_queues:85:11) {
code: 'ERR_HTTP_HEADERS_SENT'
}
Node.js v22.19.0
[nodemon] app crashed - waiting for file changes before starting...
app.js
if(process.env.NODE_ENV!="production"){
require('dotenv').config()
}
const express=require('express');
const mongoose = require("mongoose");
const app=express();
const path = require('path');
const PORT = 3000;
const methodOverride=require('method-override')
const ejsMate=require("ejs-mate")
const ExpressError=require('./utils/ExpressError.js')
const listingRouter = require('./routes/listing.js')
const reviewRouter = require('./routes/review.js')
const userRouter = require('./routes/user.js')
const session=require('express-session')
const MongoStore = require("connect-mongo");
const flash=require('connect-flash')
const passport=require('passport')
const LocalStrategy=require('passport-local')
const User = require('./models/user');
const dbUrl=process.env.ATLASDB_URL;
// Set the view engine to EJS
app.set('view engine', 'ejs');
// Set the directory where the views are located
app.set('views', path.join(__dirname, 'views'));
// Middleware to parse URL-encoded data
app.use(express.urlencoded({ extended: true }));
app.use(methodOverride("_method"))
// use ejs-locals for all ejs templates:
app.engine('ejs', ejsMate);
// Middleware to serve the public folder
app.use(express.static(path.join(__dirname, '/public')));
main().then(()=>{
console.log('connected to DB');
})
.catch(err => console.log(err));
async function main() {
await mongoose.connect(dbUrl);
// use `await mongoose.connect('mongodb://user:password@127.0.0.1:27017/test');` if your database has auth enabled
}
const store=MongoStore.create({
mongoUrl:dbUrl,
crypto:{
secret:"mysecretsupercode",
},
touchAfter:24 * 3600,
});
store.on("error", (err) => {
console.log("Error in mongo session store:", err);
});
const sessionOptions={
store,
secret:"mysecretsupercode",
resave:false,
saveUninitialized:false,
cookie:{
expires:Date.now()+7*24*60*60*1000,
maxAge:7*24*60*60*1000,
httpOnly:true // for security purpose
}
};
app.use(session(sessionOptions))
app.use(flash())
app.use(passport.initialize());
app.use(passport.session());
// use static authenticate method of model in LocalStrategy
passport.use(new LocalStrategy(User.authenticate()));
// use static serialize and deserialize of model for passport session support
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use((req,res,next)=>{
res.locals.success=req.flash("success")
res.locals.error=req.flash("failure")
res.locals.currUser=req.user;
next()
})
// for testing passport
// app.use('/demo',async (req,res)=>{
// let fakeUser=new User({
// email:"priya@gmail.com",
// username:"priya"
// })
// let registeredUser=await User.register(fakeUser,"helloWorld")
// res.send(registeredUser);
// })
app.use('/listings',listingRouter)
app.use('/listings/:id/reviews',reviewRouter)
app.use('/',userRouter)
app.use((req,res,next)=>{
next(new ExpressError(404,"Page not Found!"))
})
app.use((err, req, res, next) => {
// Catch the "headers already sent" error and log it without crashing
if (err.code === 'ERR_HTTP_HEADERS_SENT') {
console.error('Warning: Headers already sent error (non-critical)');
return; // Don't crash, just return
}
let {status=500, message="Something went wrong!"} = err;
res.status(status).render("error",{message});
})
app.listen(PORT,()=>{
console.log(`Server is running on PORT ${PORT}`)
})
Подробнее здесь: https://stackoverflow.com/questions/798 ... or-with-mo
Мобильная версия