Я пишу веб-приложение для отображения веб-страницы с контентом из базы данных PostgreSQL, используя NodeJS, express и pg-обещание.
У меня есть javascript базы данных под названием "db / location.js", который запрашиваеттаблица местоположений.
var db_global = require('./db'); # db.js is for building the database connection
var db = db_global.db;
var locationList = [];
// add query functions
module.exports = {
getAllLocationList: getAllLocationList,
locationList: locationList
};
function getAllLocationList() {
db.any('select * from location')
.then(function (data) {
console.log(data);
locationList = data;
}
);
}
В папке маршрутов у меня есть javascript маршрута с именем locationRoute.js.
var express = require('express');
var router = express.Router();
var db = require('../db/location');
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
/* GET the map page */
router.get('/locations', function(req, res) {
db.getAllLocationList();
console.log(db.locationList);
res.render('locations', {
title: "Express and Leaflet API", // Give a title to our page
//jsonData: db.getAllLocations // Pass data to the View
jsonData: db.locationList // Pass data to the View
});
});
module.exports = router;
Когда вызывается "http://localhost:3000/locations",предполагается, что он отображает "location.jade", который должен отображать "db.locationList" в таблице.
Моя проблема в том, что "console.log (db.locationList);" всегда вызывается передЗапрос был выполнен. Это привело к тому, что «db.locationList» (jsonData) был пуст.
Я не хочу связывать уровень контроллера со слоем базы данных, но как решить проблему?