仅被调用一次的函数执行两次
我正在制作一个程序,该程序将读取嵌套文件夹中文件的内容。现在,我只是试图在控制台中记录该文件的内容。但是我得到的是两个日志,而不是一个。这是到目前为止我所做的
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const getStats = promisify(fs.stat);
const readdir = promisify(fs.readdir);
const http = require('http');
handle_files = async (req, res) => {
let files = await scanDir("logs_of_109");
let result = await read_content(files)
check_file_content(result)
res.writeHead(200, { 'Content-Type': 'text/html' });
// console.log(result)
res.write("Hello");
res.end();
};
check_file_content = (file_data) => {
console.log(file_data[1])
}
async function read_content(files) {
let file_data = []
files.map(file => {
let start_index = file.toString().lastIndexOf('.') + 1
let ext = file.substring(start_index, file.length)
if (ext == 'data') {
file_data.push(fs.readFileSync(file, { encoding: 'utf-8' }))
}
})
return file_data
}
http.createServer(handle_files).listen(8080)
async function scanDir(dir, fileList = []) {
// fetch list of files from the giver directory
let files = await readdir(dir);
// loop through all the files
for (let file of files) {
// join new folder name after the parent folder
// logs_of_109/24
let filePath = path.join(dir, file);
try {
//
let stats = await getStats(filePath);
if (!stats.isDirectory()) {
// add the filepath to the array
fileList.push(filePath);
}
if (stats.isDirectory()) {
await scanDir(filePath, fileList);
}
} catch (err) {
// Drop on the floor..
}
}
return fileList;
}
我希望文件内容只记录一次,但是在控制台上记录了两次。为什么会发生这种情况,我该如何阻止呢?
回答如下:您的浏览器正在向服务器发出两个请求,最有可能是您在地址栏中输入的URL的请求,另一个是favicon.ico
的请求。 (您可以通过在浏览器中打开开发工具并转到“网络”标签来快速分辨。)
handleFiles
应该查看req
并根据要求执行操作。 (这是代码应该做的[[anyway。)
仅被调用一次的函数执行两次
我正在制作一个程序,该程序将读取嵌套文件夹中文件的内容。现在,我只是试图在控制台中记录该文件的内容。但是我得到的是两个日志,而不是一个。这是到目前为止我所做的
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const getStats = promisify(fs.stat);
const readdir = promisify(fs.readdir);
const http = require('http');
handle_files = async (req, res) => {
let files = await scanDir("logs_of_109");
let result = await read_content(files)
check_file_content(result)
res.writeHead(200, { 'Content-Type': 'text/html' });
// console.log(result)
res.write("Hello");
res.end();
};
check_file_content = (file_data) => {
console.log(file_data[1])
}
async function read_content(files) {
let file_data = []
files.map(file => {
let start_index = file.toString().lastIndexOf('.') + 1
let ext = file.substring(start_index, file.length)
if (ext == 'data') {
file_data.push(fs.readFileSync(file, { encoding: 'utf-8' }))
}
})
return file_data
}
http.createServer(handle_files).listen(8080)
async function scanDir(dir, fileList = []) {
// fetch list of files from the giver directory
let files = await readdir(dir);
// loop through all the files
for (let file of files) {
// join new folder name after the parent folder
// logs_of_109/24
let filePath = path.join(dir, file);
try {
//
let stats = await getStats(filePath);
if (!stats.isDirectory()) {
// add the filepath to the array
fileList.push(filePath);
}
if (stats.isDirectory()) {
await scanDir(filePath, fileList);
}
} catch (err) {
// Drop on the floor..
}
}
return fileList;
}
我希望文件内容只记录一次,但是在控制台上记录了两次。为什么会发生这种情况,我该如何阻止呢?
回答如下:您的浏览器正在向服务器发出两个请求,最有可能是您在地址栏中输入的URL的请求,另一个是favicon.ico
的请求。 (您可以通过在浏览器中打开开发工具并转到“网络”标签来快速分辨。)
handleFiles
应该查看req
并根据要求执行操作。 (这是代码应该做的[[anyway。)