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)
}
}
};
});
}