我正在尝试将所有文件包含在名为“controllers”的目录中,该目录中包含带有快速路由和其他一些内容的文件。
问题是这些文件中定义的路由不起作用,但如果我将所有代码粘贴到索引文件(需要控制器的文件)中,它们就可以正常工作。
这是我的代码/文件:
index.js
// Expressjs
const app = require('express')();
// Load and initialize the controllers.
require('./lib/controllersLoader');
/*
* Initializing the listener according to the settings in the config.
*/
app.listen(3000, err => {
// Throwing an exception since the whole app depends on this.
if (err) throw err;
console.log(`SERVER: Running on port ${config.server.port}`);
});
LIB / controllersLoader.js
const fs = require('fs');
// Getting an Array of the files in the 'controllers' folder.
let files = fs.readdirSync( __dirname + '/../controllers');
files.forEach( fileName => {
require( __dirname + '/../controllers/' + fileName );
});
控制器/ index.js
const app = require('express')();
const debug = require('../config').debug;
app.get('/', (req, res) => {
res.send('Hello, World!');
});
答案 0 :(得分:0)
我认为你每次要求它时都会初始化新的快速实例:
const app = require('express')();
您是否只能使用一个快速实例并将其传递给您的控制器? 像这样:
module.exports = function(app){
app.get('/', (req, res) => {
res.send('Hello, World!');
});
}
并打电话给他们:
require( __dirname + '/../controllers/' + fileName )(app);
您的问题与此问题非常相似:https://stackoverflow.com/a/6059938/734525
答案 1 :(得分:0)
在您的控制器文件中,您正在创建一个快速"子应用程序",为其附加路由,然后对其执行任何操作。
你应该:
示例强>:
<强> index.js 强>
// Expressjs
const app = require('express')();
// Load and initialize the controllers.
require('./lib/controllersLoader')(app);
<强> LIB / controllersLoader.js 强>
const fs = require('fs');
// Getting an Array of the files in the 'controllers' folder.
let files = fs.readdirSync( __dirname + '/../controllers');
module.exports = app => {
files.forEach( fileName => {
require( __dirname + '/../controllers/' + fileName )(app);
});
}
<强>控制器/ index.js 强>
const debug = require('../config').debug;
module.exports = app => {
app.get('/', (req, res) => {
res.send('Hello, World!');
});
}