这让我很困惑。我是NodeJS的新手,到目前为止我非常喜欢它,但有些事情却让我感到困扰。有人给了我一个非常基本的Node项目起点,但我不确定该如何在谷歌上搜索相关内容。
//myapp/server.js
var config = require('./config');
var app = express();
var api = require('./app/routes/api')(app, express); // <-- this?
app.use('/', api);
var server = app.listen(3000, function () {
console.log('\n============================');
console.log(' Server Running on Port 3000 ');
console.log('============================\n');
});
然后有一个包含路由的api.js文件。
//myapp/app/routes/api.js
var config = require('../../config');
var mysql = require('mysql');
module.exports = function(app, express) {
var api = express.Router();
api.all('/', function(req, res) {...});
api.all('/route-two', function(req, res) {...});
api.all('/another-route', function(req, res) {...});
return api;
}
理想情况下,我希望能将这里正在发生的事情分解成更有组织的结构,但是,我想确切地了解我正在做什么。
让我困惑的主要是这一行。
var api = require('./app/routes/api')(app, express);
我不知道您可以在没有
.
或其他连接它们的东西的情况下将()()
放在一起。能否有人解释一下正在发生的事情?此外,
(app,express)
的目的是什么?似乎将 app
和 express
传递给应用程序的 api
部分,以便可以达到其范围?我错了吗?如果有更简洁的方法,我很想得到一些见解。感谢任何想法。
谢谢!
编辑 为确保我理解...
var api = require('require this file')(params available to this file);
将任何需要的要求从api.js
移动到server.js
,然后将其作为参数包含。
var api = require('./app/routes/api')(config, app, express, mysql);
编辑
在得到来自@AhmadAssaf @Gurbakhshish Singh和@guy mograbi的更多有用反馈之后,我想要在另一个文件中使用的模块不应该通过require()
被调用。相反,它们应该通过第二个括号传递进来。
//.server.js
var config = require('./config');
var app = express();
var api = require('./app/routes/api')(config, app, express);
| | |
_____________/______/________/
/ / /
//.app/routes/api.js | | |
module.exports = function(config, app, express) {
var api = express.Router();
// code to handle routes
}
可能我的理解有误,但根据我所了解的情况来看。
//.server.js
var config = require('./config');
var app = express();
var register = require('./app/routes/register')(config, app, express);
var login = require('./app/routes/login')(config, app, express);
| | |
_________________/______/________/
/ / /
//.app/routes/login.js | | |
module.exports = function(config, app, express) {...handle login...}
//.app/routes/register.js
module.exports = function(config, app, express) {...handle registration...}
etc. etc.
希望我的想法是正确的。感谢大家对此的帮助! :)