Обслуживание файлов в локальной сети с помощью Deno - PullRequest
1 голос
/ 03 мая 2020

Я недавно решил немного поиграться с Deno .

Сейчас я пытаюсь настроить файловый сервер basi c в моей локальной сети, но он будет только обслуживать файлы на моем компьютере, а не в остальной части сети (я даже не могу отправить запрос http на сервер извне моего компьютера). Я не могу, на мой взгляд, понять, почему это работает только локально.

Я добавил код, который я использую в данный момент ниже, на всякий случай, но я почти уверен, что проблема где-то иначе, потому что у меня та же проблема с этим примером file_server и когда я создаю файловый сервер с oak

import { serve } from 'https://deno.land/std@v0.42.0/http/server.ts';
const server = serve({ port: 3000 });

const decoder = new TextDecoder('utf-8');

for await (const req of server) {
    const filePath = 'public' + req.url;

    try {
        const data = await Deno.readFile(filePath);
        req.respond({ body: decoder.decode(data) });
    } catch (error) {
        if (error.name === Deno.errors.NotFound.name) {
            console.log('File "' + filePath + '" not found');
            req.respond({ status: 404, body: 'File not found' });
        } else {
            req.respond({ status: 500, body: 'Rest in pieces' });
            throw error;
        }
    }
}

Команда, которую я использую для запуска файл:

deno --allow-all server.ts

Когда я создаю простой файловый сервер в Node.js, все работает просто отлично. Он может передавать файлы на мой компьютер и любое другое устройство в сети.

Я думаю, что проблема в моем понимании Дено и его концепций безопасности, но я не знаю. Я был бы очень признателен за любую помощь и может предоставить более подробную информацию, если требуется.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Вам необходимо привязать имя хоста к 0.0.0.0 следующим образом:

const server = serve({ hostname: '0.0.0.0', port: 3000 });

По умолчанию ваш веб-сервер привязывается только к интерфейсу обратной связи, это означает, что он отвечает только на localhost и 127.0.01.

Привязка к 0.0.0.0 указывает Deno на привязку ко всем IP-адресам / интерфейсам на вашей машине.

Ваш сетевой IP-адрес в формате 192.168.... также связывается с веб-сервером Deno, который позволяет другому компьютеру в вашей сети получить доступ к веб-серверу с вашего локального IP-адреса.

0 голосов
/ 03 мая 2020

Получается, что мою проблему можно решить, добавив имя хоста на сервер следующим образом:

const server = serve({ hostname: '<local ip adress>', port: 3000 });

Если кто-нибудь сможет объяснить мне, почему это работает, я буду благодарен.

...