2016-11-23 44 views
3

我試圖從express.js數據庫查詢路由不同的無線電會話/情節。我可以從我的快速路由中的URL中獲取路由參數。但我不確定如何使用param來查詢數據庫的正確對象。如何使用快速路由參數訪問數據庫對象

我能夠得到這個被硬編碼帕拉姆爲我服務,與在service.js「標題」變量如下工作。目前,我只知道如何將快遞變量傳遞給視圖。有沒有辦法將標題param從我的express路徑傳遞到service.js文件?

Routes.js

'use strict'; 

const express = require('express'); 
const Sessions = require('../models/sessions') 
const routes = express.Router(); 
const apiRoutes = express.Router(); 

apiRoutes.get('/sessions', (req, res) => { 
    Sessions.find({}, (err, sessions) => { 
    if(err) { 
     return res.status(500).json({message: err.message}); 
    } 
    res.json({sessions: sessions}); 
    }) 
}); 

routes.get('/', (req, res, next) => { 
    return res.render('index', {title: 'Home'}); 
}); 


// I added this bit of code after realizing I needed to use mongoose to query the database. I'm still unsure how to pass the object to my javascript but I'm getting closer. 
routes.get('/:title', function (req, res, next) { 
    const title = req.params.title 
    Sessions.find((err, sessions) => { 
    if (err) return console.error(err); 
    for (let i = 0; i < sessions.length; i++) { 
     if (title === sessions[i].title.toLowerCase()) { 
     res.render('session') 
     } 
    } 
    }) 
}) 

module.exports = [routes, apiRoutes]; 

index.js

'use strict'; 
const express = require('express'); 
const app = express(); 
const [routes, apiRoutes] = require('./src/routes'); 

require('./src/database'); 
require('./src/seed'); 

app.use('/', express.static('public')); 

app.set('view engine', 'pug'); 
app.set('views', __dirname + '/views'); 

app.use('/api', apiRoutes); 
app.use('/', routes); 

app.listen(process.env.PORT || 8082); 

service.js

const root = window.location.origin; 
const title = 'session 1' 

function callService(){ 
    service(`${root}/api/sessions`) 
    .then(retrieveSession) 
    .catch(function(e) { 
     console.log(e) 
    }); 
} 

function retrieveSession(data) { 
    for (let i = 0; i < data.sessions.length; i++) { 
    if(data.sessions[i].title.toLowerCase() === title) { 
     return data.sessions[i]; 
    } 
    } 
} 

function service(url) { 
    return new Promise(function(res, rej) { 
    var httpRequest = new XMLHttpRequest(); 
    httpRequest.open('GET', url); 
    httpRequest.onreadystatechange = handleResponse; 
    httpRequest.onerror = function(error) { 
     rej(error) 
    } 
    httpRequest.send(); 

    function handleResponse() { 
     if (httpRequest.readyState === 4) { 
     if (httpRequest.status === 200) { 
      var data = JSON.parse(httpRequest.responseText); 
      res(data) 
     } else { 
      rej(this.statusText) 
     } 
     } 
    }; 
    }); 
} 

回答

0

我能夠通過經由數據傳遞到視圖,以實現所期望的結果貓鼬與下面的片段。

routes.get('/:title', function (req, res, next) { // Passes url param 
    const title = req.params.title //stores url param in varaible 
    Sessions.findOne({ 'title': title }, function (err, session) { // compares url param against my mongoose schema and queries the database for the desired object 
    if (err) return handleError(err); // checks for errors 
    res.render('session', {session: session}); // renders the page while passing the desired data. 
    }) 
})