Думаете, что я всё, сдулся, да? Что ни одну статью больше написать не могу? А вот и нет! Могу!
Сама идея разрабатывать и серверную и клиентскую часть для Web на одном языке весьма заманчива. При желании для этого можно использовать Java + GWT. Я как-то однажды даже писал простенькое приложение на такой связке. В этой же статье я попытаюсь создать простое приложение на Node.js.
Для начала скачаем сам Node.js с официального сайта https://nodejs.org. Если вы используете Windows, то лучше всего выбрать msi пакет с соответствующей вашей системе разрядностью.
После установки создайте какую-нибудь папку для нашего первого приложения на Node.js. Внутри создайте пока пустой файл “example.js”.
Чтобы создать простой сервер, который будет принимать HTTP-запросы и возвращать ответ, нам нужно подключить модуль http с помощью команды require:
1 |
const http = require('http'); |
Здесь для объявления переменной-константы мы использовали const из ES-2015. Теперь мы можем использовать экспортируемые методы и свойства модуля http обращаясь к нашей переменной http, к которой мы присвоили результат вызова require.
Сам файл “example.js”, который мы пишем — это тоже модуль. Мы можем его подключить в каком-нибудь другом файле. Например для файла “testrequire.js”, находящегося в том же каталоге:
1 |
const example = require("./example.js"); |
После чего мы можем в файле “testrequire.js” использовать экспортируемые методы и свойства модуля “example.js”. Сейчас, правда, он ничего не экспортирует. Экспортировать можно добавляя значения в module.exports:
1 2 3 4 5 6 |
const http = require('http'); module.exports.x = "Vasya"; module.exports.f1 = function() { return 100; }; |
Теперь в “testrequire.js” мы можем использовать наши экспортируемые x и f1:
1 2 3 4 |
const example = require("./example.js"); console.log(example.x); console.log(example.f1()); |
Теперь мы можем запустить “testrequire.js” на выполнение командой:
1 |
node testrequire.js |
В консоли выведется:
1 2 |
Vasya 100 |
Теперь в нашем “example.js” создадим простой сервер, который будет отвечать “Hello, World” на все запросы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const http = require('http'); module.exports.x = "Vasya"; module.exports.f1 = function() { return 100; }; const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((request, response) => { response.statusCode = 200; response.setHeader('Content-Type', 'text/plain'); response.end('Hello, World\n'); }); |
В createServer мы передаём функцию, которая будет отвечать на каждый запрос сервера. У неё два параметра: request (запрос) и response (ответ). В теле функции мы указываем HTTP status code = 200 OK и заголовок ответа Content-Type : text/plain, затем вызываем response.end('Hello, World\n');, что указывает, что мы указали все заголовки и тело ответа (в данном случае тело ответа мы передаём в самом response), и завершает ответ. В данном случае мы использовали новый способ объявления функций из ES-2015. В старом варианте JavaScript этот кусок выглядел бы так:
1 2 3 4 5 |
var server = http.createServer( function (request, response) { response.statusCode = 200; response.setHeader('Content-Type', 'text/plain'); response.end('Hello, World\n'); }); |
Осталось только запустить сервер на прослушивание какого-нибудь порта с помощью listen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
const http = require('http'); module.exports.x = "Vasya"; module.exports.f1 = function() { return 100; }; const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((request, response) => { response.statusCode = 200; response.setHeader('Content-Type', 'text/plain'); response.end('Hello, World\n'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); }); |
В метод console.log мы передали строку с кавычками ` — это новый тип кавычек из ES-2015 в дополнение к старым, который позволяет добавлять переводы строк, а также выражения в ${...} (в данном случае мы вставили значения параметров hostname и port.
Наш простенький сервер готов. Запустим его с командной строки:
1 |
node example.js |
В консоли выведется:
1 |
Server running at http://127.0.0.1:3000/ |
А в браузере мы сможем по адресу http://localhost:3000/ увидеть строчку “Hello, World”.
Хэллоувордщик еще один…
JavaScript это чудо в перьях.
Возьмём и объявим два объекта:
var human = {name:»Richard»};
var figure = {strong: true};
human.__proto__ = figure.
После этого human.strong даёт true.
Или же можно вызывать метод Object.setPrototypeOf(human, figure), он тоже установит свойство __proto__ для human.
Надо отмѣтить, что при создании объекта с помощью фигурных скобок объект получает в качестве прототипа сам объект Object (то есть Object.prototype.__proto__ или ещё что-то).
Однако если создать объект так:
gentleman = Object.create(null);// создаётся объект, у которого в протитипе null
и назначить ему свойство __proto__
gentleman.__proto__ = figure;
gentleman.strong будет undefined;
Только вызвав Object.setPrototypeOf(gentleman, figure)
можно назначить прототип для объекта, созданного без прототипа!!!!
Это определёно стандартом каким-то или глюк вообще?
Сергей Есенин, будучи «московским озорным гулякой», писал стихи вроде «я ли вам не свойский, я ль не деревенский», сомневаясь в своей деревенскости.
Если блоггер пишет, что он «сдулся», возможно, ему пора закрывать блог. Для этого нужно написать что-то глубокомысленное напоследок.
Можно к примеру взять в пример этот блог: http://donat-13.livejournal.com/
последнее сообщение автора, датированное маем 2014 года озаглавлено как «вся твоя жизнь в нескольких абзацах». А до этого этот автор в заголовке своего блога писал «Будущее России создается здесь».
Бессмысленность бытия, бессмысленность познания бытия могут быть очевидны, главное не задумываться и отвлекаться на что-то от этих мыслей. Можно отвлекаться от этих мыслей «бухлом и бабами», иногда приходится отвлекаться от этих мыслей деятельностью по добыче пропитания (самый эффективный способ). Но когда вопрос пропитания не стоит и делать нечего, голова может начать думать и понять бренность всего.
К счастью, у вѣдьмака-программиста, судя по блогу денег пока нет и ему приходится на всем экономить.
Но в чем причина того, что он так мало пишет в блоге? У него много дел во внешнем мире (работа, борьба за выживание) или же у него нет вдохновения и иссякли идеи?
Читатели данного блога с нетерпением ждут ответа на данный вопрос и для них он имеет большой смысл даже в масштабах Вселенной. Но ещё больше они ждут новых статей)))