[当我使用“ 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);
谢谢!
if(fs.existsSync(url2.file)==true)
您正在跑步:
if(fs.existsSync(undefined)==true)
这永远不会是真的。
如果需要特定的查询参数,例如
file=index.js
,则必须将该URL解析为数据结构,然后该数据结构将允许您访问.file
属性。
有几种解析查询字符串的方法。您可以使用URL library解析整个URL,然后它将为您提供所谓的URLSearchParams。
您可以自己获取查询字符串,然后使用queryString library仅将查询字符串解析为其片段。
您可以使用Express之类的框架,该框架会自动为您解析查询字符串参数并将其放入
req.query
。
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);