2012-05-22 2 views
2

Когда я использую expressjs, но я не знаю, как его использовать с streamlinejs.Как использовать streamlinejs в expressjs?

Посмотрите на экспресс-код:

var app = express.createServer(); 

app.get('/', function(req,res) { 
    User.find({name:'Jack'}, function(err, users) { 
     res.send(users); 
    }); 
}); 

Как использовать streamlinejs в коде?

ответ

2

Это то, о чем я подробно расскажу в FAQ (https://github.com/Sage/streamlinejs/blob/master/FAQ.md#the-underscore-trick-is-designed-for-callbacks- но-не-события, как-делать-я-дело-с-событий).

Самым простым решением является добавление знака подчеркивания в качестве дополнительного параметра для get обратного вызова:

app.get('/', function(req,res, next, _) { 
    var users = User.find({name:'Jack'}, _); 
    res.send(users); 
}); 

Единственная проблема будет, если connect добавляет четвертый параметр на обратный вызов в один прекрасный день. Ниже немного безопаснее (но, вероятно, излишним, потому что я не понимаю, почему connect бы изменить его обратного вызова API):

app.get('/', function(req,res) { 
    (function(_) { 
     var users = User.find({name:'Jack'}, _); 
     res.send(users); 
    })(trap); // trap is a generic callback that handles errors 
}); 
+0

К сожалению, у него есть третий параметр. См. Демонстрацию в документе expressjs: 'app.get ('/ users /: id?', Function (req, res, next) {..}' – Freewind

+0

Затем вы можете добавить подчеркивание как четвертый параметр 'function (req, res , next, _) {..} 'или использовать второе решение. –

+0

Я отредактировал ответ, чтобы добавить параметр' next'. Я также добавил параметр «trap» во втором решении. –

1

Мы используем Экспресс и Streamline для The Thingdom, и сделать это, мы создали простую оболочку что позволяет обратному вызову next (третий параметр) быть обратным вызовом Streamline, как для обработчиков маршрутов, так и для промежуточных обработчиков.

Здесь вы идете:

https://gist.github.com/1087991

=)

Я был смысл, чтобы сделать это в общий модуль и опубликовать НПМ - Я сделаю это в ближайшее время.Edit: https://github.com/aseemk/express-streamline

Обратите внимание, что есть один компромисс, как результат этого - вы не можете иметь обработчик маршрута «продолжить» (провалиться) в другие обработчик маршрутов. Однако мы никогда не использовали эту функцию, и не предвидим, чтобы мы это делали - гораздо проще узнать, что каждый обработчик маршрута является конечным пунктом назначения, поэтому мы были в порядке с этим компромиссом.

Редактировать: Проверено только с помощью Экспресс 2.x.

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