EthanRBrown / web-development-with-node-and-express

Companion repository to Web Development With Node and Express, first edition.
1.01k stars 503 forks source link

Ch10 Tag - Error with app.use( require(' express-session')()); #5

Open ghost opened 9 years ago

ghost commented 9 years ago

I have been working in Chapter 9 for Cookies and Sessions. With my own web app that I have been building as I follow along with your book is not able to load my root page when I attempt your example. The console shows errors with express-sessions depreciated with options for resave, saveUninitialized, and req.secret (provide secret option). I tested your ch10 tag to see how to debug my mistake and found the same error.

ch10 copy

I then went and looked up the express-sessions on github for more info. I found the following code with one option added:

This works: var session = require('express-session') app.use(session({secret: 'keyboard', resave: true}));

This produces errors: var session = require('express-session') app.use(session({secret: credentials.cookieSecret, resave: true}));

It is unclear how I can refactor your example to work, so the secret key will be hidden via module.export in the credentials.js file. Please let me know your advice for correcting this issue. Thanks.

EthanRBrown commented 9 years ago

Yes, frustratingly, express-session has changed considerably since I finished the manuscript, including deprecated options that now generate warnings. However, the repository should still work since it makes version numbers explicit in package.json. Also, those warning should not produce errors, so I suspect something else is wrong. I will look into this and get back to you.

PJgithub commented 9 years ago

I also have errors with this...

duckhee commented 7 years ago

hi I have a problem I try ch 10 another error. It is parse error. Error: Parse error on line 67: ...pt> --------------------^ Expecting 'OPEN_INVERSE_CHAIN', 'INVERSE', 'OPEN_ENDBLOCK', got 'EOF' at Object.parseError (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js:267:19) at Object.parse (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js:336:30) at HandlebarsEnvironment.parse (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js:46:43) at compileInput (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js:514:19) at ret (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js:523:18) at ExpressHandlebars._renderTemplate (/home/won/Desktop/work/workspace/nodejs/node_modules/express-handlebars/lib/express-handlebars.js:247:12) at ExpressHandlebars. (/home/won/Desktop/work/workspace/nodejs/node_modules/express-handlebars/lib/express-handlebars.js:173:21) Error: Parse error on line 67: ...pt> --------------------^ Expecting 'OPEN_INVERSE_CHAIN', 'INVERSE', 'OPEN_ENDBLOCK', got 'EOF' at Object.parseError (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js:267:19) at Object.parse (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js:336:30) at HandlebarsEnvironment.parse (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js:46:43) at compileInput (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js:514:19) at ret (/home/won/Desktop/work/workspace/nodejs/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js:523:18) at ExpressHandlebars._renderTemplate (/home/won/Desktop/work/workspace/nodejs/node_modules/express-handlebars/lib/express-handlebars.js:247:12) at ExpressHandlebars. (/home/won/Desktop/work/workspace/nodejs/node_modules/express-handlebars/lib/express-handlebars.js:173:21)

this error code how to fix it .... I try exam but, exam is making server error. I don't know could you help me, plz??

duckhee commented 7 years ago

this is source meadowlark.js

var fortune = require('./lib/fortune.js') ;

var express = require('express') ;

var formidable = require('formidable') ;

var jqupload = require('jquery-file-upload-middleware') ;

var credentials = require('./credentials.js') ;

var app = express() ;

var handlebars = require('express-handlebars').create({defaultLayout: 'main', helpers: {section: function (name, options) { if(!this._sections){ this._sections = {} ; } this._sections[name] = options.fn(this) ; return null ; } } }) ;

app.engine('handlebars', handlebars.engine) ; app.set('view engine', 'handlebars') ;

app.set('port', process.env.PORT || 3000) ;

app.disable('X-powered-by') ;

app.use(require('cookie-parser')(credentials.cookieSecret)) ;

app.use(require('express-session')({ resave: false, saveUninitialized: false, secret: credentials.cookieSecret, })) ;

app.use(express.static(__dirname + '/public')) ;

app.use(require('body-parser')()) ;

app.use(function(req, res, next) { res.locals.flash = req.session.flash ; delete req.session.flash ; res.locals.showTests = app.get('env') !== 'production' && req.query.test === '1' ; next() ; }) ;

function getWeatherData() { return { locations: [ { name: 'Portland', forecastUrl: 'http://www.wunderground.com/US/OR/Portland.html', iconUrl: 'http://icons-ak.wxug.com/i/c/k/cloudy.git', weather: 'Overcast', temp: '54.1 F (12.3 C)', }, { name: 'Bend', forecastUrl: 'http://www.wunderground.com/US/OR/Bend.html', iconUrl: 'http://icons-ak.wxug.com/i/c/k/partlycloudy.git', weather: 'Partly Cloudy', temp: '55.0 F (12.8 C)', }, { name: 'Manzanita', forecastUrl: 'http://www.wunderground.com/US/OR/Manzanita.html', iconUrl: 'http://icons-ak.wxug.com/i/c/k/rain.git', weather: 'Light Rain', temp: '55.0 F (12.8 C)', }, ], } ; }

app.use(function(req, res, next) { if(!res.locals.partials){ res.locals.partials = {} ; } res.locals.partials.weatherContext = getWeatherData() ; next() ; }) ;

app.use('/update', function(req, res, next) { var now = Date.now() ; jqupload.fileHandler({ uploadDir: function() { return __dirname + '/public/uploads/' + now ; }, uploadUrl: function() { return '/uploads/'+now ; }, })(req, res, next) ; }) ;

app.use(require('cookie-parser')(credentials.cookieSecrept)) ;

app.get('/headers', function(req, res) { res.set('Content-Type', 'text/plain') ; var s = '' ; for(var name in req.headers) { s += name + ':' + req.headers[name] + '\n' ; } res.send(s) ; }) ;

app.get('/', function(req, res) { res.render('home') ; });

app.get('/about', function(req, res) { res.render('about', {fortune: fortune.getFortune(), pageTestScript: '/qa/tests-about.js' } ) ; });

app.get('/tours/hood-river', function(req, res) { res.render('tours/hood-river') ; }) ;

app.get('/tours/oregon-coast', function(req, res) { res.render('tours/oregon-coast') ; }) ;

app.get('/tours/request-group-rate', function(req, res) { res.render('tours/request-group-rate') ; }) ;

app.get('/jquery-test', function(req, res) { res.render('jquery-test') ; }) ;

app.get('/nursery-rhyme', function(req, res) { res.render('nursery-rhyme') ; }) ;

app.get('/data/nursery-rhyme', function(req, res) { res.json({ animal: 'squirrel', bodyPart: 'tail', adjective: 'bushy', noun: 'heck', }) ; }) ;

app.get('/thank-you', function(req, res) { res.render('thank-you') ; }) ;

app.get('/newsletter', function(req, res) { res.render('newsletter', {csrf: 'CSRF token goes here' }) ; }) ;

function NewsletterSignup() {} NewsletterSignup.prototype.save = function(cb) { cb() ; } ;

var VALID_EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/;

app.post('/newsletter', function(req, res) {
    var name = req.body.name || '', email = req.body.email || '' ;
    if(!email.match(VALID_EMAIL_REGEX)) {
        if(req.xhr) {
            return res.json({ error: 'Invalid name email address.' }) ;
        }
        req.session.flash = {
            type: 'danger',
            intro: 'Validation error!',
            message: 'The email address you entered was not valid.',
        } ;
        return res.redirect(303, '/newletter/archive') ;
    }
    new NewletterSignup({name: name, email: email }).save(function(err) {
        if(err) {
            if(req.xhr) {
                return res.json({error: 'Database error.'}) ;
            }
            req.session.flash = {
                type: 'danger',     
                intro: 'Database error!',
                message: 'There was a database error; please try again later.',
            } ;
            return res.redirect(303, '/newletter/archive') ;
        }
        if(req.xhr) {
            return res.json({ success: true }) ;
        }
        req.session.flash = {
            type: 'success',
            intro: 'Thank you!',
            message: 'You have now been signed up for the newsletter.',
        } ;
        return res.redirect(303, '/newletter/archive') ;
    }) ;
}) ;

app.get('/newsletter/archive', function(req, res) { res.render('newsletter/archive') ; }) ;

app.post('/process', function(req, res) { if(req.xhr || req.accepts('json,html') ==='json') { res.send({success: true }) ; }else{ res.redirect(303, '/thank-you') ; } }) ;

app.get('/contest/vacation-photo', function(req, res) { var now = new Date() ; res.render('contest/vacation-photo', {year:now.getFullYear(), month: now.getMonth() }) ; }) ;

app.post('/contest/vacation-photo/:year/:month', function(req, res) { var form = new formidable.IncomingForm() ; form.parse(req, function(err, fields, files) { if(err) { return res.redirect(303, '/error') ; } console.log('received fields:') ; console.log(fields) ; console.log('received files:') ; console.log(files) ; res.redirect(303, '/thank-you') ; }) ; }) ;

app.get('/greeting', function(req, res) { res.render('about', { message: 'welcome', style:req.query.style, userid: req.cookie.userid, username: req.session.username,}) ; }) ;

app.get('/no-layout', function(req, res) { res.render('no-layout', { layout: null }) ; }) ;

app.get('/test', function(req, res) { res.type('text/plain') ; res.send('this is a test') ; }) ;

app.post('/process-contact', function(req, res) { console.log('Received contact from ' + req.body.name + ' <'+req.body.email + '>') ; try{ return res.xhr ? res.render({success: true }) : res.redirect(303, '/thank-you') ; }catch(ex) { return res.xhr ? res.json({error: 'Database error.' }) : res.redirect(303, '/database-error') ; } }) ;

app.use(function(req, res, next) { res.status(404) ; res.render('404') ; }) ;

app.use(function(err, req, res, next) { console.log(err.stack) ; res.status(500) ; res.render('500') ; }) ;

app.listen(app.get('port'), function() { console.log('Expresss started on http://localhost:' + app.get('port')+'; press Ctrl + c to terminate') ; }) ;