Я больше разбираюсь в API-интерфейсах, поэтому решил создать простой API для пива/пивоваренных заводов, и он отлично работает, и тогда ни один маршрут не будет работать. Я протестировал его, создав новый маршрут, который предназначен исключительно для тестирования этой проблемы, и он отлично работает. Таким образом, я упростил другие маршруты, чтобы буквально отправить сообщение обратно в DOM с помощью res.send()
чтобы увидеть, поможет ли резка соединения с БД, чтобы я определил проблему.
Этот тестовый маршрут работает по назначению, отправив сообщение в DOM "привет!". (/app/routes/test_routes.js
):
module.exports = function(app, db) {
app.get('/test', (req, res) => {
res.send("hello!");
});
};
Однако это не работает вообще, несмотря на то, что он идентичен функции (/app/routes/brewery_routes.js
):
module.exports = function(app, db) {
app.get('/brewery', (req, res) => {
res.send("hello!");
});
};
Это индекс маршрутов, который тянет все мои маршруты в (/app/routes/index.js
):
const beerRoutes = require('./beer_routes');
module.exports = function(app, db) {
beerRoutes(app, db);
};
const breweryRoutes = require('./brewery_routes');
module.exports = function(app, db) {
breweryRoutes(app, db);
};
const cityRoutes = require('./city_routes');
module.exports = function(app, db) {
cityRoutes(app, db);
};
const testRoutes = require('./test_routes');
module.exports = function(app, db) {
testRoutes(app, db);
};
Это мой файл сервера, который обрабатывает все маршруты (/server.js
):
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const bodyParser = require('body-parser');
const app = express();
const db = require('./config/db');
const PORT = 8000;
app.use(bodyParser.urlencoded({ extended: true }));
MongoClient.connect(db.url,(err, database) =>{
if (err) {
return console.log(err)
}
require('./app/routes')(app, database);
app.listen(PORT, () => {
console.log("We are pouring beer at port " + PORT);
});
});
Общая файловая структура моего приложения:
Root/
app/
routes/
index.js
test_routes.js
brewery_routes.js
beer_routes.js
city_routes.js
server.js
Что странно, когда я просматриваю журналы консоли, я не вижу ошибок для моего /test
маршрута, но другие маршруты возвращаются с этим огромным списком ошибок шрифта. Как вы можете видеть по моему коду, у меня нет загруженных шрифтов, поэтому мне интересно, является ли это более серьезной проблемой, чем я знаю.
Какие-либо предложения?
В index.js
вы index.js
несколько вещей в module.exports
снова и снова. Только последний выживет и будет доступен тем, кто нуждается в модуле. Вы не показываете код, который загружает index.js и пытается использовать эти маршруты, поэтому я не знаю, что такое правильное решение, но это точно объясняет, почему только последний маршрут /app/routes/test_routes.js
в index.js может когда-либо работать.
Таким образом, каждое из этих присвоений module.exports
перезаписывает предыдущее. Только последний выживает и фактически экспортируется:
const beerRoutes = require('./beer_routes');
module.exports = function(app, db) {
beerRoutes(app, db);
};
const breweryRoutes = require('./brewery_routes');
module.exports = function(app, db) {
breweryRoutes(app, db);
};
const cityRoutes = require('./city_routes');
module.exports = function(app, db) {
cityRoutes(app, db);
};
const testRoutes = require('./test_routes');
module.exports = function(app, db) {
testRoutes(app, db);
};
Это так:
let a;
a = function() { console.log("1"); }
a = function() { console.log("2"); }
a(); // outputs "2"
Возможно, это то, что вы хотите:
module.exports = function(app, db) {
require('./beer_routes')(app, db);
require('./brewery_routes')(app, db);
require('./city_routes')(app, db);
require('./test_routes')(app, db);
}
Затем, когда модуль загружается и вызывается конструктор, вы инициируете все эти маршруты.