Node.js使用readline处理客户端上传文件的实现咨询
funcs.Process with Node.js readline Got it, let's walk through how to build out the funcs.Process method using Node.js's readline module to handle your uploaded text file. This approach lets you process the file line-by-line without loading the entire thing into memory—perfect for efficiency, especially with larger files.
First, the Full Implementation
Here's the complete code for your funcs object, with inline explanations tailored to your use case:
const fs = require('fs'); const readline = require('readline'); const funcs = { async Process(file, req) { // 1. Create a read stream from the uploaded temporary file const fileStream = fs.createReadStream(file.path); // 2. Set up the readline interface to handle line-by-line parsing const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity // Ensures we handle all newline types (CRLF/LF) across platforms }); // 3. Store processed lines as we go const processedContent = []; // 4. Iterate over each line asynchronously for await (const line of rl) { // --- Replace this with your actual line processing logic --- // Example use cases you might need: // - Filter out empty lines: if (line.trim()) processedContent.push(line) // - Convert all text to uppercase: processedContent.push(line.toUpperCase()) // - Add a timestamp prefix: processedContent.push(`${new Date().toISOString()} | ${line}`) const processedLine = `Processed: ${line}`; processedContent.push(processedLine); } // 5. Join processed lines back into a single string with proper line breaks const outputData = processedContent.join('\n'); // Optional: Clean up the temporary upload file (if your middleware doesn't auto-delete) // fs.unlinkSync(file.path); return outputData; } }; module.exports = funcs;
Key Details to Keep in Mind
- Stream Efficiency: Using
fs.createReadStreamandreadlinemeans we only load one line into memory at a time, which is way more resource-friendly than reading the entire file at once—critical if you expect large uploads. - Cross-Platform Compatibility: The
crlfDelay: Infinityoption ensures the readline interface correctly identifies both Windows (CRLF) and Unix (LF) newline characters, so your processing works regardless of where the file was created. - Error Handling: Since this is an
asyncfunction, any errors during file reading or line processing will be thrown automatically, and caught by the.catch()block in your existing upload route. No extra try/catch is needed here unless you want custom error messaging. - Temporary File Cleanup: If you're using a middleware like Multer that creates temporary files, uncomment the
fs.unlinkSyncline to delete the file after processing—this prevents your server's disk from filling up over time.
How It Fits Your Existing Route
Your current upload route doesn't need any modifications! This Process method returns a promise that resolves to the processed text data, which your route then sends as an attachment. When a user uploads a file, it'll be read line-by-line, processed, and sent back as output.txt exactly as you have set up.
内容的提问来源于stack exchange,提问作者Fede E.

