检查服务器上是否存在文件-节点js

问题描述 投票:0回答:1

[当我使用“ http://localhost:8080/?file=index.js”之类的URL查询时,总是得到“文件不存在”。

该文件确实存在。有什么建议吗?

目的:查找文件是否在我的服务器上。文件名必须在file参数中。

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);

谢谢!

node.js filesystems
1个回答
0
投票
if(fs.existsSync(url2.file)==true)

您正在跑步:

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

这永远不会是真的。

如果需要特定的查询参数,例如file=index.js,则必须将该URL解析为数据结构,然后该数据结构将允许您访问.file属性。


有几种解析查询字符串的方法。

    您可以使用URL library解析整个URL,然后它将为您提供所谓的URLSearchParams。
  1. 您可以自己获取查询字符串,然后使用queryString library仅将查询字符串解析为其片段。

  2. 您可以使用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);
    
  • © www.soinside.com 2019 - 2024. All rights reserved.