Проверьте, существует ли файл на моем сервере - node js - PullRequest
1 голос
/ 01 марта 2020

Когда я использую URL-запрос типа "http://localhost: 8080 /? File = index. js", я всегда получаю "файл не существует".

Файл существует. Любые предложения?

Цель: Найти, существует ли файл на моем сервере. имя файла должно быть в параметре файла.

let http = require("http");
let fs = require("fs");

http.createServer(function(req,res) {
    let url2 = req.url;
    if(fs.existsSync(url2.file)==true)
    {
        res.end("The file exists");
    }

    else{
        res.end("The file doesn't exists");
    }

}).listen(8080);

Спасибо!

1 Ответ

0 голосов
/ 01 марта 2020

req.url в вашем случае будет /?file=index.js. И, url2.file равно undefined, поэтому, когда вы делаете это:

if(fs.existsSync(url2.file)==true)

вы работаете:

if(fs.existsSync(undefined)==true)

, что никогда не будет правдой.


Если вам нужен конкретный c параметр запроса, такой как file=index.js, то вам нужно проанализировать этот URL в структуре данных, которая затем позволит вам получить доступ к свойству .file.

Существует несколько способов анализа строки запроса.

  1. Вы можете использовать библиотеку URL-адресов и проанализировать весь URL-адрес, а затем он даст вам то, что он вызывает URLSearchParams.

  2. Вы можете получить только строку запроса самостоятельно и использовать библиотеку queryString для анализа только строки запроса в ее части.

  3. Вы можете использовать такую ​​среду, как Express, которая автоматически анализирует параметры строки запроса и помещает их в req.query.

Вот реализация с использованием модуля queryString :

const http = require("http");
const fs = require("fs");
const querystring = require('querystring');

http.createServer(function(req,res) {
    let index = req.url.indexOf("?");
    if (index !== -1) {
        let qs = req.url.slice(index + 1);
        let qsObj = querystring.parse(qs);
        if (qsObj.file) {
            if (fs.existsSync(qsObj.file)) {
                res.end(`The file ${qsObj.file} exists`);
            } else {
                res.end(`The file ${qsObj.file} does not exist`);
            }
            return;
        }
    }
    res.end("Invalid request, no file specified");

}).listen(8080);

Или вот реализация с использованием класса URL:

const http = require("http");
const fs = require("fs");

http.createServer(function(req,res) {
    urlObj = new URL(req.url, `http://${req.headers.host}`);
    let file = urlObj.searchParams.get("file");
    if (file) {
        if (fs.existsSync(file)) {
            res.end(`The file ${file} exists`);
        } else {
            res.end(`The file ${file} does not exist`);
        }
        return;
    }
    res.end("Invalid requeset, no file specified");

}).listen(8080);
...