RPC на JavaScript
Года три назад я написал материал об удаленных процедурах, выполняемых с помощью фреймворка GWT. В то время эта технология действительно выглядела прорывом. Еще бы: клиентский и серверный код пишутся на одном и том же языке! Но за прошедшее время произошло много событий, которые побуждают меня всё чаще писать на чистом JavaScript, особенно там, где не требуется задействовать мощные библиотеки и API.
На стороне сервера использую Node.js, развивающийся в последние месяцы просто космическими темпами. На стороне же клиента — не менее интенсивно развивающийся jQuery, который, помимо возможности рисовать красивые интерфейсы, содержит мощные средства выполнения асинхронных запросов. Ну, а посредником между клиентом и сервером может выступать код в формате JSON (я и раньше его иногда использовал, в GWT для этого есть необходимые пакеты).
Вот как можно организовать передачу JSON-объекта на сервер. На стороне клиента:
Как принять на стороне сервера (задействован пакет express):
Вот так, довольно бесхитростно. Учитывая то, что с сервера можно присылать довольно сложные объекты, этот метод вполне может заменить GWT в экспресс-проектах, когда городить огород некогда и незачем.
На стороне сервера использую Node.js, развивающийся в последние месяцы просто космическими темпами. На стороне же клиента — не менее интенсивно развивающийся jQuery, который, помимо возможности рисовать красивые интерфейсы, содержит мощные средства выполнения асинхронных запросов. Ну, а посредником между клиентом и сервером может выступать код в формате JSON (я и раньше его иногда использовал, в GWT для этого есть необходимые пакеты).
Вот как можно организовать передачу JSON-объекта на сервер. На стороне клиента:
var queryParams = {greeting: 'Hello, World!', someBool: true};
$.getJSON('/hello', queryParams, function(data){
// асинхронный разбор прилетевшего с сервера JSON-объекта.
}
Как принять на стороне сервера (задействован пакет express):
app.get('/hello', function (req, res) {
res.setHeader('Content-Type', 'application/json; charset=utf-8');
var someObject = {
replay: 'Воистину ' + req.query.greeting,
yesOrNo: req.query.someBool
};
res.send(JSON.stringify(someObject));
}
Вот так, довольно бесхитростно. Учитывая то, что с сервера можно присылать довольно сложные объекты, этот метод вполне может заменить GWT в экспресс-проектах, когда городить огород некогда и незачем.
- —
- 08 декабря 2012, 23:43
Комментарии (3)
RSS свернуть / развернутьSergei_T
Однажды я по линии фриланса написал страничку с гуглемапсами, где показывалось как добраться из пункта А в пункт Б и какие на пути встречаются достопримечательности. Пока всё это лежало в тестовой директории на моем сайте, заказчика всё устраивало, хвалил (хвалить нужно было, конечно, не меня, а мощные библиотеки GWT, позволяющие творить чудеса в том числе и с картами). Когда же я ему прислал архив с откомпилированным кодом, он просто-таки возопил благим матом:«Что за дикий объем! Ты хоть понимаешь, сколько браузеру грузить всего придется!». Все попытки объяснить, что это всего лишь пермутаци, призванные обеспечить кроссбраузерность и что грузиться будут они не все, а в зависимости от ситуации и порциями, ни к чему не привели. Пришлось для этого идиота переписывать на стандартном JS. Когда же в итоге он не увидел в новом варианте трех четвертей бывших красот и удобств и попросил всё вернуть, я послал его в пешее эротическое путешествие, ибо сам не знает чего хочет.
GWT ничего «своего» не грузит, а лишь переводит мысли с языка Java на язык JavaScript, попутно очень не хило оптимизируя. А вот если задействовать какое-нибудь ExtGWT, не имеющее к классическому GWT никакого идеологического отношения, то да, будет грузиться много всего и по сети, и в рунтиайме. Поэтому я пользуюсь только кошерными фреймворками.
yababay
Заказчик странный какой-то)
Sergei_T
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.