# Node.JS для решения задач
В этом разделе предлагаются задачи по теме AJAX.
Конечно же, они требуют взаимодействия с сервером. Мы будем использовать серверную часть, написанную на JavaScript, на Node.JS.
[cut]
Если вы не использовали Node.JS ранее -- не беспокойтесь. Здесь нашей целью является преимущественно клиентская часть, поэтому прямо сейчас изучать Node.JS не обязательно. Серверные скрипты уже готовы. Нужно только поставить Node.JS и модули, чтобы их запускать.
## Установка
Для настройки окружения будет достаточно сделать два шага:
- Сначала установите сам сервер Node.JS.
Если у вас Unix-система -- рекомендуется собрать последнюю версию из исходников, а также NPM. Вы справитесь.
Если Windows -- посетите сайт http://nodejs.org или скачайте установщик (32 или 64-битный) с расширением `.msi` из http://nodejs.org/dist/latest/.
- Выберите директорию, в которой будете решать задачи. Запустите в ней:
```
npm install node-static
```
Это установит в текущую директорию модуль [node-static](https://github.com/cloudhead/node-static), который станет автоматически доступным для скриптов из поддиректорий.
**Если у вас Windows и команда не сработала, то скорее всего дело в том, что "не подхватились" новые пути. Перезапустите ваш файловый менеджер или консоль.**
## Проверка
Проверьте инсталяцию.
Для этого:
- Создайте какую-нибудь поддиректорию и в ней файл `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');
```
- Запустите его: `node server.js`.
Должно вывести:
```
Server running on port 8080
```
[warn header="Нельзя запустить больше одного сервера одновременно!"]
При попытке запуска двух серверов (например, в разных консолях) -- будет конфликт портов и ошибка.
[/warn]
- Откройте в браузере http://127.0.0.1:8080/server.js.
Должно вывести код файла `server.js`.
Если всё работает -- отлично, теперь вы готовы решать задачи.
## Примеры
В примерах, за редким исключением, для краткости будет приводиться не полный скрипт на 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` используются два объекта:
- `req` -- объект запроса ("request"), из него читаем данные.
- `res` -- объект ответа ("response"), в него пишем данные.
- вызов `res.writeHead(HTTP-код, [строка статуса], {заголовки})` пишет заголовки.
- вызов `res.write(txt)` пишет текст в ответ.
- вызов `res.end(txt)` -- завершает запрос ответом.
## Демо
Кроме просмотра кода, можно будет попробовать и скачать различные демки.
Вот пример демо, можете попробовать нажать на кнопку -- она работает.
[iframe src="example" border="1" height=80 zip samedomain]
Если хотите посмотреть пример поближе и поиграть с ним -- скачайте полный код, он будет работать и на вашем Node.JS.
## Больше о Node.JS
Больше о сервере Node.JS можно узнать в [скринкасте по Node.JS](/nodejs-screencast).