en.javascript.info/4-ajax/2-ajax-nodejs/article.md
2015-02-27 13:21:58 +03:00

136 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Node.JS для решения задач
В этом разделе предлагаются задачи по теме AJAX.
Конечно же, они требуют взаимодействия с сервером. Мы будем использовать серверную часть, написанную на JavaScript, на <a href="http://nodejs.org">Node.JS</a>.
[cut]
Если вы не использовали Node.JS ранее -- не беспокойтесь. Здесь нашей целью является преимущественно клиентская часть, поэтому прямо сейчас изучать Node.JS не обязательно. Серверные скрипты уже готовы. Нужно только поставить Node.JS и модули, чтобы их запускать.
## Установка
Для настройки окружения будет достаточно сделать два шага:
<ol>
<li>Сначала установите сам сервер Node.JS.
Если у вас Unix-система -- рекомендуется собрать последнюю версию из исходников, а также NPM. Вы справитесь.
Если Windows -- посетите сайт <a href="http://nodejs.org">http://nodejs.org</a> или скачайте установщик (32 или 64-битный) с расширением `.msi` из <a href="http://nodejs.org/dist/latest/">http://nodejs.org/dist/latest/</a>.
</li>
<li>Выберите директорию, в которой будете решать задачи. Запустите в ней:
```
npm install node-static
```
Это установит в текущую директорию модуль [node-static](https://github.com/cloudhead/node-static), который станет автоматически доступным для скриптов из поддиректорий.
**Если у вас Windows и команда не сработала, то скорее всего дело в том, что "не подхватились" новые пути. Перезапустите ваш файловый менеджер или консоль.**
</li>
</ol>
## Проверка
Проверьте инсталяцию.
Для этого:
<ol>
<li>Создайте какую-нибудь поддиректорию и в ней файл `server.js` с таким содержимым:
```js
var http = require('http');
var static = require('node-static');
var file = new static.Server('.');
http.createServer(function (req, res) {
file.serve(req, res);
}).listen(8080);
console.log('Server running on port 8080');
```
</li>
<li>Запустите его: `node server.js`.
Должно вывести:
```
Server running on port 8080
```
[warn header="Нельзя запустить больше одного сервера одновременно!"]
При попытке запуска двух серверов (например, в разных консолях) -- будет конфликт портов и ошибка.
[/warn]
</li>
<li>Откройте в браузере <a href="http://127.0.0.1:8080/server.js">http://127.0.0.1:8080/server.js</a>.
Должно вывести код файла `server.js`.</li>
</ol>
Если всё работает -- отлично, теперь вы готовы решать задачи.
## Примеры
В примерах, за редким исключением, для краткости будет приводиться не полный скрипт на Node.JS, а только код обработки запроса.
Например, вместо:
```js
var http = require('http');
var url = require('url');
var querystring = require('querystring');
function accept(req, res) {
res.writeHead(200, {
'Content-Type': 'text/plain',
'Cache-Control': 'no-cache'
});
res.end("OK");
}
http.createServer(accept).listen(8080);
```
...Будет только функция `accept`, или даже только её содержимое:
```js
res.writeHead(200, {
'Content-Type': 'text/plain',
'Cache-Control': 'no-cache'
});
```
## Основные методы
В функции `accept` используются два объекта:
<ul>
<li>`req` -- объект запроса ("request"), из него читаем данные.</li>
<li>`res` -- объект ответа ("response"), в него пишем данные.
<ul>
<li>вызов `res.writeHead(HTTP-код, [строка статуса], {заголовки})` пишет заголовки.</li>
<li>вызов `res.write(txt)` пишет текст в ответ.</li>
<li>вызов `res.end(txt)` -- завершает запрос ответом.</li>
</ul>
</li>
</ul>
## Демо
Кроме просмотра кода, можно будет попробовать и скачать различные демки.
Вот пример демо, можете попробовать нажать на кнопку -- она работает.
[iframe src="example" border="1" zip]
Если хотите посмотреть пример поближе и поиграть с ним -- скачайте полный код, он будет работать и на вашем Node.JS.
## Больше о Node.JS
Больше о сервере Node.JS можно узнать в [скринкасте по Node.JS](/nodejs-screencast).