2015-05-25 1 views
-1

Я работаю над разработкой приложения с использованием express/nodejs. Это то, что мой routes/index.js файл выглядит, как вы можете видеть, что я пытаюсь включить sidebar модуль и получить доступ к нему в index зрения:Эксплуатация базового модуля в представлении

var express = require('express'); 
var router = express.Router(); 
var sidebar = require('./modules/sidebar'); 

router.get('/', function(req, res){ 
    res.render('index'); 
}); 

module.exports = router; 

это то, что мой routes/modules/sidebar.js выглядит следующим образом:

module.exports.showSystemMenu = function(){ 
    var elem = document.getElementsByClassName('app-settings-wrapper')[0]; 
    elem.classList.toggle('app-settings-wrapper-exposed'); 
} 

на мой взгляд (index), когда я пытаюсь получить доступ к функции модуля, я получаю сообщение об ошибке, что showSystemMenu не функция:

$scope.showSystemSelect = sidebar.showSystemMenu(); 

Я ценю любые разъяснения относительно того, почему я получаю эту ошибку и как ее решить.

Заранее благодарен!

+1

В зависимости от того, как визуализируется представление 'index', вы можете использовать:' res.render ('index', {sidebar: sidebar}); '. Если представление отображается на стороне сервера, это обеспечит «боковую панель» как «локальную» переменную с тем же именем. Однако, если он отображается на стороне клиента, поскольку может использоваться предложение '$ scope', тогда стороне клиента' sidebar.js' нужно будет обслуживать - ''. Обратите внимание, что 'module.exports' не существует на стороне клиента. –

ответ

1

Сторона клиента и серверная сторона - две разные части.

Все, что происходит в ваших route.js или app.js, называется стороной на сервере. Представленные представления - это ваша клиентская сторона. Вызов кода стороне сервера со стороны клиента (как вы это делаете) невозможен.

Вы могли бы использовать:

а) передать модуль на стороне клиента. например res.render('index', {moment: moment}); Этот вызов будет передавать momentJS со стороны сервера на клиентскую сторону. (Просто пример)

или

б) извлечь код из модуля routes/modules/sidebar.js и реализовать его на ваш взгляд, в качестве общего JS функции на стороне клиента. Например. реализовать его в своем представлении в теге скрипта.

+0

А! Спасибо за разъяснения. Таким образом, модули используются для организации/модуляции логики на стороне сервера и определения того, что происходит в представлении, а index.js - это код на стороне сервера, поэтому я должен по существу использовать любые модули в этом файле, чтобы выяснить, какая надбавка должна быть отображена и передать его в объект JSON в представление? – AnchovyLegend

+0

Будет ли это более уместным в качестве углового модуля? – AnchovyLegend

+0

В этом случае, вероятно, лучшим решением будет Угловой модуль. Похоже, что это не имеет ничего общего с логикой на стороне сервера. – staaar

Смежные вопросы