Ben Nodejitsu aşağıdaki hatayı dışarı iplik bulmak uyandı Bu sabahOturum Tanımsız Kullanarak Bağlan-Redis/ExpressJS/Düğüm
Warning: connection.session() MemoryStore is not designed for a production environment, as it will leak memory, and will not scale past a single process.
Kendime düşündüm - ve daha uygun bir şey bulmaya gittim. Redis'e yerleştim ve hemen başvuruma connect-redis
ve node-redis
'u uygulamaya başladım. Bununla birlikte, aşağıdaki hata bir düzeltmede tekrarlanan denemelerden sonra yüzeye devam eder.
TypeError: Cannot set property 'loggedIn' of undefined
at /Users/Ryan/Aggregus/server.js:300:25
at Promise.<anonymous> (/Users/Ryan/Aggregus/object_models/user.js:60:5)
at Promise.<anonymous> (/Users/Ryan/Aggregus/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)
at Promise.EventEmitter.emit (events.js:95:17)
at Promise.emit (/Users/Ryan/Aggregus/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38)
at Promise.fulfill (/Users/Ryan/Aggregus/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20)
at /Users/Ryan/Aggregus/node_modules/mongoose/lib/query.js:1813:13
at model.Document.init (/Users/Ryan/Aggregus/node_modules/mongoose/lib/document.js:243:11)
at completeOne (/Users/Ryan/Aggregus/node_modules/mongoose/lib/query.js:1811:10)
at /Users/Ryan/Aggregus/node_modules/mongoose/lib/query.js:1779:11
loggedIn
req.session.loggedIn
I kullanıcılar giriş yapmış izlemek için kullandığınız bir oturum değişkeni söz ediyor: şöyle hatadır. Aşağıdaki Söz konusu uygulama kodu: Ben
express.session
çağrı öncesinde
app.use(express.cookieParser());
vermiş
- :
var express = require('express'); var crypto = require('crypto'); var mongoose = require('mongoose'); var nodemailer = require('nodemailer'); var request = require('request'); var underscore = require('underscore'); var mandrill = require('node-mandrill')('0bFNPDenlDiZtu7aXujDQQ'); var connect = require('connect'); var engines = require('consolidate'); var fs = require('fs'); var redis = require("redis").createClient(); var RedisStore = require('connect-redis')(express); var sessionStore = new RedisStore({ client: redis }); var stripe_api_key = 'KEY'; var Stripe = require('stripe')(stripe_api_key); var app = express(); app.configure(function() { app.engine('html', engines.jade); app.set('view engine', 'html'); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.session({secret: "svtabyrki4q786as37c785ta8vi56aiw4i8w467acv", store: sessionStore})); app.use(express.static(__dirname + '/www')); app.use(express.compress()); app.use(app.router); }); // Mongoose Connection var db = mongoose.connection; var dbURI = 'HIDDENURL'; db.on('disconnected', function() { mongoose.connect(dbURI, {server:{auto_reconnect:true}}); }); db.on('error', function(error) { console.error('Error in MongoDb connection: ' + error); mongoose.disconnect(); }); mongoose.connect(dbURI, {server:{auto_reconnect:true}}); // Mongoose Object Models var User = require('./object_models/user')(mongoose, nodemailer, mandrill); var Notifications = require('./object_models/notification')(mongoose, nodemailer); var Experience = require('./object_models/experience')(mongoose, nodemailer); var Booking = require('./object_models/booking')(mongoose, nodemailer); var Review = require('./object_models/review')(mongoose, nodemailer); var Heart = require('./object_models/heart')(mongoose, nodemailer); var Message = require('./object_models/message')(mongoose, nodemailer); // Nodemailer Settings var smtpTransport = nodemailer.createTransport("SMTP",{ service: "Gmail", auth: { user: "[email protected]", pass: pwd } }); // Bootstrap Call app.get('/', function(req, res) { res.render('../index.html'); console.log("WUSUP"); });
daha da netlik sağlamak için, burada ben boşuna bu noktaya kadar çalıştık budur Bu konunun çoğu makalesinde önerildiği gibi.
new RedisStore
numaralı aramamın, başlatmanın hemen ardındanclient
numarasına başvurduğundan emin oldum.- Hem inTTT
express.session
hem de 'express.cookieParser' çağrılarının her ikisinden sonraapp.use(app.router)
yerleştirdim. - Redis sunucum,
createClient()
numaralı çağrı aracılığıyla tamamen işlevseldir.
Bu similar questionapp.router
öncesinde sessionStore başlatıldı Express için aranacak bir çok önemsiz app.use
başlatma engelleyerek çözüldü.
TL, DR: connect-redis
kullanarak oturum değişkenlerim undefined
döndürür. Web'i cevaplar için inceledim ve tek ipucum, Express'in kendi oturum işlemlerini gerçekleştirmeden önce app.router
'un başlatıldığını gösteriyor. O küçük aksaklıkların olduğu yerde benim dışımda. Yığın Tanrılarından Tanrılar, benim zavallı ruhuma merhamet ederler.
Düzenleme: Bir package.json'ın başvuru için kullanışlı olduğunu düşündüm. NodeJitsu üzerinden oluşturuldu:
{
"name": "Aggregus",
"subdomain": "aggregus-Aggregus",
"scripts": {
"start": "node server.js"
},
"version": "0.0.0-14",
"engines": {
"node": "0.8.x"
},
"dependencies": {
"connect": "2.7.8",
"consolidate": "0.9.1",
"express": "3.2.2",
"jade": "0.30.0",
"mongoose": "3.6.9",
"node-mandrill":"1.0.1",
"nodemailer": "0.4.1",
"request":"2.22.0",
"stripe": "1.3.0",
"underscore":"1.4.4"
}
}
Hey @dankohn Herhangi bir istekte bulunmadan önce derhal req.user öğesini çerezden ayarlamak için nasıl bir işlev ayarlayabilirim? – morgs32
Neredeyse kesinlikle pasaport veya everyauth kullanmak istiyorsun. İşte size bir çerez koyma örneğidir: http://stackoverflow.com/questions/20484649/csrf-token-not-working-when-submitting-form-in-express/20485620#20485620 – dankohn