1
00:00:03,930 --> 00:00:06,395
В предыдущей лекции

2
00:00:06,395 --> 00:00:14,130
мы узнали об основах сетевого взаимодействия, включая детали протокола HTTP.

3
00:00:14,130 --> 00:00:20,805
Теперь мы рассмотрим, как Node может быть использован для создания HTTP-сервера.

4
00:00:20,805 --> 00:00:28,420
Здесь нам на помощь приходит основной HTTP-модуль, который встроен в Node.

5
00:00:28,420 --> 00:00:33,820
Кроме того, мы рассмотрим пару других основных модулей Node, которые полезны для

6
00:00:33,820 --> 00:00:40,390
построения HTTP-сервера с помощью Node.

7
00:00:40,390 --> 00:00:42,730
Итак, как мы используем модуль HTTP Node?

8
00:00:42,730 --> 00:00:50,045
Как я уже упоминал, модуль HTTP является одним из основных модулей, которые встроены в узел.

9
00:00:50,045 --> 00:00:53,275
Таким образом, это основной сетевой модуль, который поддерживает

10
00:00:53,275 --> 00:00:58,475
высокопроизводительный фундамент для стека HTTP.

11
00:00:58,475 --> 00:01:02,440
Таким образом, использование модуля в нашем приложении Node требует

12
00:01:02,440 --> 00:01:06,430
от нас импорта модуля в наше приложение.

13
00:01:06,430 --> 00:01:12,190
Так что это то, что мы делаем, говоря const HTTP = require и,

14
00:01:12,190 --> 00:01:15,120
имя модуля HTTP там.

15
00:01:15,120 --> 00:01:17,260
Теперь, как только модуль импортирован,

16
00:01:17,260 --> 00:01:24,330
то этот HTTP-модуль поддерживает функцию CreateServer, которая принимает в

17
00:01:24,330 --> 00:01:29,500
качестве параметра функцию, которая действует как

18
00:01:29,500 --> 00:01:32,890
функция обратного вызова для модуля CreateServer, и

19
00:01:32,890 --> 00:01:37,240
эта функция имеет два параметра: запрос и ответ.

20
00:01:37,240 --> 00:01:40,120
Запрос - это сообщение запроса, которое приходит со

21
00:01:40,120 --> 00:01:44,380
стороны клиента, и мы можем проанализировать сообщение запроса, а затем извлечь

22
00:01:44,380 --> 00:01:48,010
много информации из сообщения запроса и использовать его для

23
00:01:48,010 --> 00:01:51,850
принятия решений о том, как мы создаем ответное сообщение, соответствующее этому.

24
00:01:51,850 --> 00:01:56,665
Сообщение ответа строится с использованием второго параметра здесь, res,

25
00:01:56,665 --> 00:02:01,855
на котором мы можем построить различные значения заголовка для

26
00:02:01,855 --> 00:02:08,830
нашего сообщения ответа HTTP, а также тела сообщения ответа HTTP.

27
00:02:08,830 --> 00:02:10,120
Теперь, чтобы запустить сервер,

28
00:02:10,120 --> 00:02:11,725
как только вы создаете сервер,

29
00:02:11,725 --> 00:02:16,030
вы скажете server.listen, а затем укажите номер порта

30
00:02:16,030 --> 00:02:20,420
и имя хоста для сервера, и это запустит наш сервер.

31
00:02:20,420 --> 00:02:27,520
Мы рассмотрим некоторые детали в упражнении на примерах, которое следует за этой лекцией.

32
00:02:27,520 --> 00:02:32,770
Как я уже упоминал, информация о входящем сообщении запроса доступна

33
00:02:32,770 --> 00:02:38,130
через параметр req, который функция принимает в методе CreateServer.

34
00:02:38,130 --> 00:02:40,480
Итак, req или request,

35
00:02:40,480 --> 00:02:42,460
если вы хотите дать ему полное имя,

36
00:02:42,460 --> 00:02:46,120
вы можете назвать его как запрос, но в целом мы обнаружили, что в

37
00:02:46,120 --> 00:02:50,425
примерах мы использовали req для представления сообщения запроса.

38
00:02:50,425 --> 00:02:57,462
Он поддерживает свойства объекта Javascript, такие как заголовок,

39
00:02:57,462 --> 00:03:02,225
тело, а также различную информацию, которая может быть извлечена,

40
00:03:02,225 --> 00:03:09,350
URL-адрес и метод, который был запрошен этим сайтом клиента.

41
00:03:09,350 --> 00:03:13,240
И, в ответ, вы строите ответ, используя

42
00:03:13,240 --> 00:03:18,424
объект Javascript ответа, который поддерживает эту функцию SetHeader,

43
00:03:18,424 --> 00:03:23,570
функцию StatusCode, которая может быть установлена в код состояния сообщения ответа.

44
00:03:23,570 --> 00:03:26,235
И тогда вы напишете сообщение, говорящее

45
00:03:26,235 --> 00:03:29,440
res.write, и вы закончите сообщение, сказав

46
00:03:29,440 --> 00:03:35,785
res.end, и это занимает последнюю часть тела для сообщения.

47
00:03:35,785 --> 00:03:40,225
Тело может быть либо стандартный текст, либо HTML, либо

48
00:03:40,225 --> 00:03:47,369
любая другая информация, которую вы хотите поместить в тело этого ответного сообщения.

49
00:03:47,369 --> 00:03:49,780
Но как только res.end

50
00:03:49,780 --> 00:03:54,460
вызывается, ответ отправляется обратно клиенту с HTTP-сервера.

51
00:03:54,460 --> 00:03:59,185
Два других основных модуля, которые полезны для нас,

52
00:03:59,185 --> 00:04:04,295
когда мы создаем сервер Node HTTP, является модулем Node path.

53
00:04:04,295 --> 00:04:09,145
Модуль path позволяет нам указать путь к файлу, а затем

54
00:04:09,145 --> 00:04:14,375
проверить, существует ли файл или изучить более подробную информацию о файле.

55
00:04:14,375 --> 00:04:17,620
Например, расширение файла,

56
00:04:17,620 --> 00:04:19,185
имя и так далее.

57
00:04:19,185 --> 00:04:22,000
Таким образом, модуль пути может быть использован в

58
00:04:22,000 --> 00:04:26,360
нашем приложении, требуя модуль пути, как показано здесь.

59
00:04:26,360 --> 00:04:28,360
И затем, это поддерживает методы,

60
00:04:28,360 --> 00:04:29,990
такие как, например, path.resolve,

61
00:04:29,990 --> 00:04:33,940
который преобразует относительный путь в

62
00:04:33,940 --> 00:04:38,620
абсолютный путь, который весь путь к файлу.

63
00:04:38,620 --> 00:04:43,930
Вы также можете проверить имя расширения файла, вызвав

64
00:04:43,930 --> 00:04:47,830
функцию path.extname и укажите путь к файлу, который

65
00:04:47,830 --> 00:04:52,640
изучит расширение имени файла.

66
00:04:52,640 --> 00:04:55,870
Аналогично, модуль файловой системы,

67
00:04:55,870 --> 00:04:57,970
опять же основной модуль в узле,

68
00:04:57,970 --> 00:05:00,670
позволит нам читать и записывать

69
00:05:00,670 --> 00:05:04,805
файлы, которые существуют в локальной файловой системе на компьютере.

70
00:05:04,805 --> 00:05:08,725
Таким образом, модули файловой системы могут быть использованы в

71
00:05:08,725 --> 00:05:13,480
нашем приложении Node, требуя его, как показано здесь.

72
00:05:13,480 --> 00:05:16,765
И затем эти модули файловой системы поддерживают множество методов

73
00:05:16,765 --> 00:05:21,460
, включая метод проверки того, существует ли файл в локальной файловой системе или нет.

74
00:05:21,460 --> 00:05:24,190
Таким образом, fs.exists будет принимать

75
00:05:24,190 --> 00:05:28,165
FilePath в качестве первого параметра, а второй параметр -

76
00:05:28,165 --> 00:05:35,530
функция обратного вызова, которая вернется с параметром, который мы можем назвать его как существует.

77
00:05:35,530 --> 00:05:38,410
Этот параметр существует, будет истинным, если файл

78
00:05:38,410 --> 00:05:43,595
существует, и будет ложным, если файл не существует в локальной файловой системе.

79
00:05:43,595 --> 00:05:50,390
Аналогично, вы можете читать из файла, создав поток чтения с учетом пути к файлу.

80
00:05:50,390 --> 00:05:53,585
Таким образом, вы можете сказать fs.createReadStream

81
00:05:53,585 --> 00:05:58,240
и FilePath, и это может быть передано в ответное сообщение.

82
00:05:58,240 --> 00:06:01,175
Таким образом, файл будет прочитан из файла,

83
00:06:01,175 --> 00:06:05,290
заданного FilePath, а затем содержимое будет

84
00:06:05,290 --> 00:06:13,220
помещено в тело ответного сообщения, вызвав цепную функцию, как показано здесь.

85
00:06:13,220 --> 00:06:17,920
Итак, это несколько примеров некоторых основных модулей Node, которые будут очень

86
00:06:17,920 --> 00:06:23,710
полезны, когда мы создаем HTTP-сервер с помощью Node.

87
00:06:23,710 --> 00:06:29,223
Теперь, когда мы понимаем некоторые детали о HTTP-сервере и как он может быть построен,

88
00:06:29,223 --> 00:06:30,690
давайте перейдем к упражнению,

89
00:06:30,690 --> 00:06:36,880
где мы построим простой Node HTTP-сервер, который сначала будет обслуживать

90
00:06:36,880 --> 00:06:41,950
некоторую основную информацию, а затем мы будем обслуживать файлы

91
00:06:41,950 --> 00:06:48,170
, которые существуют в общей папке в наш проект.