现在,我们在fs模块中具有文件写入功能writeFileSync,如下所示-
const requestBody = []; req.on('data', (chunks)=>{ requestBody.push(chunks); }); return req.on('end', ()=>{ const parsedData = Buffer.concat(requestBody).toString(); const username = parsedData.split('=')[1]; fs.writeFileSync('username.txt', username); //重定向res.statusCode = 302; res.setHeader('Location','/'); return res.end(); });
同步表示已同步。这是一个阻塞代码示例。一旦文件写入完成,则仅对其余文件执行代码。上面的代码比较简单,但是如果我们进行大量的文件处理操作,将会导致应用性能下降。
这种代码执行方式将减慢其他请求的速度,并最终降低应用程序的性能。
解决此问题的方法是使用文件写入的异步功能。我们在异步的fs模块中有writeFile。以下是它的示例-
return req.on('end', ()=>{ const parsedData = Buffer.concat(requestBody).toString(); const username = parsedData.split('=')[1]; fs.writeFile('username.txt', username, (error)=>{ console.log(error); }); //重定向res.statusCode = 302; res.setHeader('Location','/'); return res.end(); });
writeFile还有一个参数,即错误对象。如果完成文件处理功能时有任何错误,我们可以在控制台中进行检查。
这样我们可以避免代码阻塞。在文件处理中,Node js可以使用操作系统多线程方法来提供更好的性能。它只是注册事件并在以后的特定时间执行它们。
异步是在node.js中处理操作的最常用方式,例如从服务器获取数据,处理数据,分页等。
ReadFile和readFileSync -
与写入文件功能类似,我们具有读取文件功能,它们也分为阻塞和非阻塞两种方式。
readFile是非阻塞的,而readFileSync是阻塞的。我们可以使用Promise处理尚未完成的操作,但一旦完成将以一定的决心做出回应。
PromiseOperationFunction() .then( ()=> console.log(‘completed with succes’); ) .catch((err)=> console.log(‘completed with failure’); );