Я могу построить сервер?

Чтобы понять основы создания сервера, важно сначала определить, что делает сервер сервером. Сервер — это любая программа или устройство, которое обеспечивает функциональность для других программ или устройств, называемых «клиентами». Эти отношения часто понимают как модель клиент-сервер, в которой серверы предоставляют клиентам услуги, такие как обмен данными или выполнение вычислительных потребностей. Хотя легко связать слово «сервер» с какой-то огромной фермой данных в центре штата Юта, на самом деле сервером может быть любой компьютер, который получает информацию и отвечает соответствующим образом. Это может показаться еще более безумным, но даже ваш компьютер может быть сервером! Давайте начнем?

Что на самом деле делают серверы??
Целью серверов является совместное использование ресурсов и распределение работы, чтобы файлы и программы могли быть доступны по всему миру без необходимости их локальной загрузки. Размещая веб-приложения и другие программы, серверы позволяют пользователю получать доступ к информации и запускать ее, просто отправляя запрос AJAX. Эти запросы отправляются нашими компьютерами серверу всякий раз, когда мы пытаемся выполнить определенные операции, и серверы запрограммированы на ответ в соответствии с нашими запросами. В этом посте мы будем полагаться на инфраструктуру Node (без Express), чтобы облегчить это общение. (Если вы хотите узнать больше о роли серверов в передаче данных клиенту и от него, посетите эту страницу в Википедии).

Начало работы — Node
Node — это интерпретатор JavaScript, который преобразует ваши файлы JavaScript во что-то, что может прочитать браузер. Поскольку архитектура Node управляется событиями, для ее работы не требуется браузер, и поэтому она чрезвычайно полезна для разработки серверных приложений. В JavaScript он работает в сочетании с запросами AJAX для отправки и получения информации. Это просто означает, что сервер определенным образом реагирует на входные данные клиента и возвращает определенную информацию в зависимости от этих входных данных. Если вам интересно узнать больше о том, как работают запросы AJAX, эта публикация может помочь прояснить некоторые моменты.

Типы запросов
Несмотря на то, что для создания сервера требуется всего несколько строк кода, важно понимать, как обрабатываются запросы, как в том, как они получены, так и в том, как на них отвечают. . Как правило, серверы получают информацию, касающуюся метода HTTP, URL-адреса, заголовков, тела, принятия заголовка (согласование контента), агента пользователя (информация о клиенте). Следует отметить, что информация, полученная серверами, должна быть предварительно преобразована в строку с помощью метода JSON.stringify(). Теперь, когда сервер может прочитать запрос, он может отправить соответствующую информацию клиенту.

Простой способ подумать об этом — связать это с едой в ресторане. Вы (будучи клиентом) отправляете запросы шеф-повару через официанта. В зависимости от ваших пожеланий шеф-повар может приготовить любые блюда из меню. Однако, если вы сделаете недействительную просьбу (например, попросите повара помыть вашу машину или попросите приготовить что-то, чего нет в меню), повар, скорее всего, сообщит вам, что ваша просьба не может быть выполнена, потому что вы просили что-то, что не было предложено (404) или что-то на кухне закончилось (500). Если вам повезет, они могут даже сказать, что в ближайшем месте должны быть необходимые вам услуги (300).

Типы ответов
Как упоминалось ранее, ответы обычно отправляются всякий раз, когда запрос требует ответа сервера. Эти типы ответов варьируются от кодов состояния, URL, заголовков, основной части, типа контента, длины контента. Поскольку информация, отправляемая обратно сервером, имеет строковую форму, мы должны помнить об анализе информации с помощью собственного метода JSON.parse().

Теперь, когда мы лучше понимаем, что такое серверы и как работает Node, давайте попробуем настроить наш сервер.

Настройка
Чтобы начать настройку нашего сервера, нам сначала нужны определенные модули, которые мы будем использовать позже. Мы делаем это для доступа к определенному программному обеспечению, которое позволяет нам отправлять информацию на наш сервер и с него. Далее мы хотим определить, к какому IP и порту мы пытаемся подключиться. Обычно ваш сервер по умолчанию использует IP-адрес localhost, поэтому нам не следует слишком беспокоиться о том, что мы там запускаем. Некоторые порты по умолчанию могут включать (8000, 8080, 3000).

Server Requirements:
var http = require('http');
var fs = require('fs');
var url = require('url');
var ip = '127.0.0.1';
var port = 3000;

Нашим следующим шагом будет определение того, какими будут наши заголовки по умолчанию. Помните, заголовки по умолчанию позволяют нашему серверу отвечать в соответствии с конкретными запросами клиентов. Запросы клиентских серверов принимают HTTP, URL, заголовки, тело, принятие заголовка и пользовательский агент.

Setting the default headers:
var defaultHeaders = {
  //allows access from all origin points
  'access-control-allow-origin': '*', 
  //specifies what type of requests to allow
  'access-control-allow-methods': 'GET, POST, PUT, OPTIONS, DELETE',
  'access-control-allow-headers': 'content-type, accept',
  //specifies the time limit set for accessing information
  'access-control-max-age': 10
};

Теперь, когда нам потребовалась соответствующая информация и установлены заголовки по умолчанию, мы можем просто указать путь к файлу, который мы хотим, чтобы наш сервер использовал, и создать фактический сервер. Запросы клиентских серверов принимают HTTP, URL, заголовки, тело, принятие заголовка и пользовательский агент.

Creating the server!:
var storage = []; //we will need this to compile body data.
var index = fs.readFileSync('./index.html'); //specifies file path.
//creates our server!
var server = http.createServer(function(request, response) {
  //information to be added
}; 

Теперь все, что нам нужно сделать, это запрограммировать наш сервер, чтобы он отвечал на определенные запросы определенным образом. В этом примере будут рассматриваться только запросы GET и POST, так как они будут составлять большую часть запросов, которые будет обрабатывать ваш сервер.

Handling GET and POST requests:
var server = http.createServer(function(request, response) {
  //checks for a GET request
  if (request.method === 'GET') {
    var headers = defaultHeaders; 
    // tells the browser what type of information to expect
    headers['Content-Type'] = 'text/html';
    //responds with a 200 status code
    response.writeHead(200, headers);
    // check to see if request.url is equal '/movies'
      if (request.url === '/movies') {
        response.end('GET: movies');
      } 
    // this end method finishes the request and sends the index page
    response.end(index); 
  // checks for a POST request
  } else if (request.method === 'POST') {
    var headers = defaultHeaders;
    headers['Content-Type'] = 'application/json'; 
    //responds with a 201 status code
    response.writeHead(201, headers) 
      // concatenates the data into a solid body that can be sent
      // as a whole for the browser to interpret
      if (request.url === '/movies') {
        var body = '';
        request.on('data', function(chunk) {
          body += chunk;
        })
        request.on('end', function() {
          storage.push(body);
        })
        response.end(body);
      } 
    response.end('Success!')
  } 
})
server.listen(port, ip) //connects to the server
console.log('port listening on ' + port);

Теперь, когда мы это сделали, все, что нам нужно сделать, это использовать наш терминал для установления соединения с нашим сервером. Для этого мы просто открываем нашу папку в терминале и запускаем следующую команду:

node server.js //this is assuming your server name is server.js

Вы должны быть в состоянии перейти к LOCALHOST: 3000 в своем браузере, чтобы увидеть свою индексную страницу. Вот оно! Теперь у вас есть полностью функционирующий сервер, который может отправлять и получать информацию. В следующем посте я подробно расскажу об этом процессе и опишу, как именно работают запросы AJAX.