Показаны сообщения с ярлыком Javascript. Показать все сообщения
Показаны сообщения с ярлыком Javascript. Показать все сообщения

NodeJS: простейший Express сервер

Этот пост в каком-то смысле продолжение поста про простейший NodeJS сервер, принимающий JSON объекты. Помимо того, что сервер может принимать данные извне (в данном случае, с помощью POST-запроса и JSON), хорошо бы чтобы он умел выдавать пользователю web-страницу с имеющимися данными. В принципе, в случае с одной страницей можно было бы вручную дописать сервер из предыдущего поста, но я решил использовать фреймворк Express, который сэкномит время на написание кода, а в дальнейшем позволит легко масштабировать сервер. Более того, Express имеет встроенные средства для генерации HTML кода из шаблонов страниц (я буду использовать EJS), и много других вещей, которые тоже, вполне возможно, пригодятся в дальнейшем.

Blogger: настройка блока "Поделиться" от Яндекс

Встроенные в Blogger кнопки "поделиться" не очень удобны: там представлен довольно ограниченный набор соц. сетей, да и сложно заставить их находиться там, где нужно (мне в итоге это не удалось в полной степени). К счастью, Яндекс предлагает свой настраиваемый блок "Поделиться". Проблемы начинаются, если хочется разместить кнопки не только на странице поста, но и на главной под каждым постом в списке, причем так, чтобы при нажатии на кнопку использовалась ссылка именно на пост, а не на страницу, на которой эта кнопка размещена. Для этого нужно использовать дополнительные настройки блока (полный список найтроек можно найти в документации).

NodeJS: простейший web-сервер принимающий POST-запросы с JSON

Я использую этот простой web-сервер для быстрого тестирования приложений, которые должны отправлять объекты JSON на сервер.
Для начала надо установить NodeJS (если он еще не установлен). В Ubuntu это делается с помощью следующей команды в терминале:
sudo apt-get install nodejs
Затем создаем файл (например, server.js) и помещаем в него следующий код:
var http = require('http');

const PORT=8080; 

function handleRequest(request, response){
    var body = [];
    request.on('error', function(err) {
        console.error(err);
    }).on('data', function(chunk) {
        body.push(chunk);
    }).on('end', function() {
        body = Buffer.concat(body).toString();
        try {
            var jsonObj = JSON.parse(body);
            console.log(jsonObj.var1);
            console.log(jsonObj.var2);
        } catch (e) {
            console.error(e);
        }

        response.on('error', function(err) {
            console.error(err);
        });

        response.writeHead(200);    
        response.end();
    });
}

var server = http.createServer(handleRequest);

server.listen(PORT, function(){
    console.log("Server listening on: http://localhost:%s", PORT);
});
Далее сохраняем файл и запускаем сервер с помощью команды:
nodejs server.js
Сервер будет слушать порт 8080, в случае входящего запроса пытаться интерпретировать его тело как объект JSON (в данном случае, объект с двумя полями: var1 и var2), выводить значение полей в консоль и отправлять обратно HTTP-код 200 (ОК). Если тело запроса не удалось интерпретировать как объект JSON, в консоль будет выведена ошибка (как и в случае, если ошибка произошла при приеме запроса или передаче ответа).
Протестировать работу сервера можно с помощью утилиты curl:
curl -H "Content-Type: application/json" -X POST -d '{"var1":"1","var2":"0"}' 127.0.0.1:8080

Qt 5.3 QML: Владение объектами С++

По умолчанию объекты, созданные в коде С++ и переданные в QML через Q_INVOKABLE методы или слоты передаются во владение Javascript. То есть если в QML передается указатель на объект, созданный в коде С++ динамически посредством вызова оператора new(), сборщик мусора Javascript удалит его по своему усмотрению: если на него не будет ссылок в Javascript, не будет родительского объекта (QObject::parent() будет пуст), или будет вызван деструктор соответствущего QQmlEngine. Это поведение можно изменить с помощью вызова статического метода:
void QQmlEngine::​setObjectOwnership(QObject * object, ObjectOwnership ownership)
Таким образом, если выставить только что созданному объекту значение QQmlEngine::CppOwnership, владение останется на стороне кода С++, и сборщик мусора его не тронет.