2017-11-30 11 views
0

을 수행 가져 오기 데이터베이스 후 콜백을 passport.js (메시지 배열) DB로부터 비동기 적으로 가져온다.화재가 나는 그것에게 <strong>사용자</strong> 객체뿐만 아니라 몇 가지 추가 데이터를 먹이 <a href="http://www.embeddedjs.com/" rel="nofollow noreferrer">EJS</a> 뷰를 렌더링 프로필 경로에 <a href="http://www.passportjs.org/" rel="nofollow noreferrer">Passport.js</a> 페이스 북 로그인을 리디렉션 할 필요가

은 불행히도, 난

/인증/페이스 북/콜백 얻을 수없는이 오류를 얻을 여기

내 server.js 코드

// Import ExpressJS 
let express = require("express"); 
let app = express(); 

// Import Body Parser 
let bodyParser = require("body-parser"); 

// Import Express Session Middleware 
let session = require("express-session"); 

// Import EJS template engine 
let ejs = require("ejs"); 

// Import custom middlewares 
let flash = require("./middlewares/flash"); 
let setUser = require("./middlewares/flash"); 

// Import Message model 
let Message = require ("./models/message"); 

// Import the user model 
let User = require("./models/user"); 

// Import PassportInitializer 
let passport = require("./config/passport.js"); 

// Import keys 
let keys = require("./config/keys"); 

app 

// Templating 
.set('view engine',"ejs") 

//Middlewares 

// parse application/x-www-form-urlencoded 
.use(bodyParser.urlencoded({ extended: false })) 

// parse application/json 
.use(bodyParser.json()) 

//Use middlewares 
.use(passport.initialize()) 
.use(passport.session()) 

// Set-up and Use Express Session 
.use(session({ 
    secret: keys.session.secret, 
    resave: false, 
    saveUninitialized: true, 
    cookie: { secure: false } 
})) 

.use(flash) 

//Routes 
.use("/assets",express.static("public")) 


// Home 
.get("/",(req,res)=>{ 

    Message.all((messages)=>{ 
     res.render("pages/index",{messages:messages}); 
    }) 
}) 

//Single message 
.get("/message/:id",(req,res)=>{ 
    Message.find(req.params.id,(message)=>{ 
     if(message===null){ 
      res.status(400).send('<h1>HTTP Error 400: Bad Request!</h1>'); 
     } else { 
      res.render("messages/show",{message:message}); 
     } 

    }); 

}) 

// Facebook OAuth 
.get("/auth/facebook/",passport.authenticate("facebook")) 

// Facebook OAuth callback 
.get('/auth/facebook/callback',passport.authenticate("facebook"),(req,res)=>{ 
     Message.all((messages)=>{res.send(messages)}); 

}) 

// Handle posted/sent message 
.post("/",(req,res)=>{ 
    //If the message body is empty 
    if(req.body.message===undefined || req.body.message===""){ 
     //flash an error message 
     req.flash("error","Empty message :("); 
     // Redirect to home 
     res.redirect("/") 
    // If the message body is not empty 
    } else { 
     // Create a new message and save it. 
     Message.create(req.body.message,()=>{ 
      req.flash("success","Message added :)"); 
      // Redirect to home 
      res.redirect("/"); 
     }); 
    } 
}) 

// Listen on port 
.listen(process.env.PORT || 3000, function(){ 
    console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env); 
}); 

그리고 내 message.js 파일입니다

// Import Message model 
let connection = require ("../config/db"); 

// Import Moment Session Middleware 
let moment = require("moment"); 


// Import Message model 
let connection = require ("../config/db"); 

// Import Moment Session Middleware 
let moment = require("moment"); 


class Message{ 
    constructor(row){ 
     this.row = row; 
    } 
    get id(){ 
     return this.row.id; 
    } 
    get content(){ 
     return this.row.content; 
    } 
    get created_at(){ 
     return moment(this.row.created_at); 
    } 

    static all(callback){ 

     // Get all messages from DB 
     connection.query("SELECT * FROM message",(error,results,fields)=>{ 
      if(error) throw error; 

      // Run the callback function once terminated 
      callback(results.map((result)=>{ 
       return new Message(result); 
      })); 
     }); 

    } 

} 

// Export the Message class 
module.exports = Message; 
// Export the Message class 
module.exports = Message; 

답변

0

내가 더러운 해결 방법인지 아니면 받아 들일만한 해결책인지는 알 수 없지만 나는 내 자신을 알아낼 수있었습니다.

나는 비동기 사용자에게 & 메시지 데이터가 다음 EJS보기 렌더링을 가져 오는 미들웨어를 추가했다. 여기

코드

//.. 
// Facebook OAuth 
.get("/auth/facebook/",passport.authenticate("facebook")) 

// Facebook OAuth callback 
.get('/auth/facebook/callback',passport.authenticate("facebook"),(req,res)=>{ 

}) 

.use((req,res,next)=>{ 
    Message.all((messages)=>{ 
     let userId = req.session.passport.user; 
     if(userId){ 
      User.find(userId,(user)=>{ 
      res.render("pages/index",{user:user,messages:messages}); 
     }); 
     } else { 
      next(); 
     } 
    }); 
}) 
//.. 
입니다