文件迭代以在 node.js 中搜索相似的短语

File iteration to search for similar phrases in node.js

我有具体问题:

该函数负责读取文件

function readFile (email){
  fs.readFile('./files/data.json', 'utf8', (err, fileContents) => {
    if (err) {
      console.error(err)
      return
    }
    try {
      const data = fileContents
      console.log(data)
    } catch(err) {
      console.error(err)
    }
  })
    if(email = (how can iterate file in search of phrases?){
      console.log('identic')
    }
    else{
      console.log('ok')
    }
}

我还从客户端收到带有 email 的请求,我将此参数传递为 email

文件结构为:

{"username":"test","email":"testtest@gmail.com"}
{"username":"test","email":"testtest@gmail.com"}

如何遍历 data.json 文件来搜索与传递的参数相同的短语? - 需要避免再次向文件添加相同的数据。

您可以逐行迭代并使用回调,return true 或 false 以指示电子邮件是否存在。 (最好的方法是使用数据库甚至 bash 命令来完成此任务,但这是我针对 Node.js 的解决方案)

'use strict';

const fs = require('fs');
const lineReader = require('readline').createInterface({
  input: fs.createReadStream('./data.txt'),
});

/**
 * Check if a given email exist or not inside data.txt file
 * @param {String} email
 * @param {Function} callback
 * @returns {Object<error, emailIsDuplicated>}
 */
function existEmail(email, callback) {
  let callbackWasExecuted = false;

  lineReader.on('line', async (line) => {
    try {
      const jsonLine = JSON.parse(line);
      if (email === jsonLine.email) {
        callbackWasExecuted = true;
        return callback(null, true);
      }
    } catch (e) {
      callbackWasExecuted = true;
      return callback(new Error(`Error parsing to json next line: ${line}`));
    }
  });

  lineReader.on('close', () => callbackWasExecuted === false && callback(null, false));
}

existEmail('testtest1@gmail.com', (error, exist) => {
  if (error) {
    return console.error(error);
  }

  console.log(`Result exist email: ${exist}`);
});

data.txt的内容:

{"username":"test","email":"testtest@gmail.com"}
{"username":"test","email":"testtest1@gmail.com"}

希望对您有所帮助。如果对解决方案有任何不清楚的地方,请告诉我。