2015-02-27 4 views
-1

Так что я начал изучать JavaScript, и исходя из .net фона я нашел следующий код:Javascript передавая аргумент: Странная Синтаксис

express.js Файл:

var express = require('express'); 
module.exports = function() { 
    var app = express(); 
    require('../app/routes/index.server.routes.js')(app); 
    return app; 
}; 

файла index.server.routes .js:

module.exports = function(app) { 
    var index = require('../controllers/index.server.controller'); 
    app.get('/', index.render); 
}; 

Как книга объяснения index.server.routes.js имеют эту функцию (приложение), и приложение является экспресс-объект, используемый для конфигурации (это настройка «/» путь). Все в порядке.

То, что я не понимаю, следующий синтаксис:

require('../app/routes/index.server.routes.js')(app); 

То, что я понимаю, что он передает в приложение аргумент модуля index.server.routes.js и этот модуль устанавливает ГЭТ.

Но может ли кто-нибудь объяснить, как работает этот синтаксис? Исходя из фона .net, мне кажется кастинг (очень странный и запутанный).

+0

Что такое 'require' функция? Разве это отличается от встроенного Javascript? Если это так, пожалуйста, вопрос как таковой. – thatidiotguy

+0

требуется функция CommonJS, используемая для загрузки модулей javascript ... CommonJS является стандартом. –

+0

'require()' - это функция, которая возвращает функцию. Возвращаемая функция специфична для переданных аргументов. Этот пример - это просто вызов возвращаемой функции немедленно и с параметром app. – Malk

ответ

1

Синтаксис - это синтаксис для вызовов функций. index.server.routes.js экспортирует функцию, поэтому вы можете ее назвать. Подумайте, что это то же самое, как:

var routes = require('../app/routes/index.server.routes.js') 
routes(app) // routes is a function 

Обычно в экспресс передать свой app экземпляр вокруг как форма инъекции явной зависимости.

+0

Да. То же самое. Не могли бы вы предоставить больше информации о синтаксисе require ('...') (app)? Является ли это очень полезным, это хорошая практика =] ... Ps * Я могу принять только в течение 7 минут. –

+0

'require' - это только узловые модули, ничего особенного для Express. См. Здесь http://nodejs.org/api/modules.html – elclanrs

0

Это довольно просто. Когда вы вызываете require в Node.js, узел загружает модуль (файл) и возвращает вам все, что экспортировал этот модуль через свойство module.exports. В этом случае он экспортировал функцию.

Как таковой, require предоставляет вам функцию, и вы можете сразу вызвать ее, поставив круглые скобки сразу после инструкции require.

код эквивалентен сделать это:

var routesFn = require('../app/routes/index.server.routes.js') 
routesFn(app) 
Смежные вопросы