我尝试在其他js文件中使用应用程序实例,但不知道为什么它不起作用,下面是示例代码(我使用Express 4)
app.js
const app = express();
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
const bodyParser = require('body-parser')
const jsonParser = bodyParser.json({ limit: '10mb' }) //{
const urlEncoded = bodyParser.urlencoded({ limit: '10mb', extended: true }) //
app.set('superSecret', config.secret)
app.disable("x-powered-by")
//oauth file
var oauth= require('./services/oauth');
module.exports = app
在服务/ oauth文件index.js中
module.export.oauth2app=oauth2app
const oauth2app =require('../../app')
oauth2app.use('/',router); //its not working
为什么oauth2app.use在index.js中不起作用,它会像oauth2app.use这样的函数抛出错误,任何主体都可以告诉我我做错了什么
答案 0 :(得分:3)
您具有循环依赖关系。 app.js正在加载service / oauth / index.js,然后尝试加载该文件。你不能那样做。导致循环循环的第二个循环将返回if not k
,因此{}
将不起作用。
通常的解决方案是在导出的模块构造函数中将{}.use()
对象传递到service / oauth / index.js模块,而不是尝试加载应用程序。
app
然后,在oauth文件中,导出用于初始化模块的函数:
const app = express();
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
const bodyParser = require('body-parser')
const jsonParser = bodyParser.json({ limit: '10mb' }) //{
const urlEncoded = bodyParser.urlencoded({ limit: '10mb', extended: true }) //
app.set('superSecret', config.secret)
app.disable("x-powered-by")
// oauth file
// pass app to module constructor function
require('./services/oauth')(app);