使用导入的自定义nodejs模块

时间:2017-03-11 18:32:53

标签: javascript node.js

我正在尝试通过电子邮件搜索我的本地数据库中的用户,但是当我尝试通过导入引用从不同的js文件执行此操作的函数时,我得到未定义的结果。我在Stack上搜索了一下我遇到的这个问题,听说过一些被称为回调的东西,这是我需要实现的吗?如果是这样,你能指点我一个例子吗?

提前致谢!

这是我导出的代码(db.js文件):

var neo4j = require('neo4j-driver').v1;
var driver = neo4j.driver("bolt://localhost:7687", neo4j.auth.basic("neo4j", "neo4j"));
var session = driver.session();
exports.findEmail = (email) => {
  // console.log('hi');
  session
      .run("MATCH (a:Person) WHERE a.email = {email} RETURN a.name AS name, a.email AS email, a.location AS location", {
          email: email
      })
      .then((result) => {
          let result_string = '';

          result.records.forEach((record) => {
              console.log(record._fields);
              result_string += record._fields + ' ';

          });
          return result_string;
      })
      .catch((e) => {
          return ('error : ' + JSON.stringify(e));
      })
}

这是我的代码调用export:(test.js)

var tester = require('./db.js');
let temp = tester.findEmail("testemail@yahoo.com");
console.log(temp);

1 个答案:

答案 0 :(得分:0)

问题是JS是异步的,你使用它是因为它是同步代码。

你可以尝试这个,应该工作:

   var neo4j = require('neo4j-driver').v1;
   var driver = neo4j.driver("bolt://localhost:7687", neo4j.auth.basic("neo4j", "neo4j"));
   var session = driver.session();
   const findEmail = (email, callback) => {
   console.log('hi :', email);
   session
     .run("MATCH (a:Person) WHERE a.email = {email} RETURN a.name AS name, a.email AS email, a.location AS location", {
      email: email
  })
  .then((result) => {
      let result_string = '';

      result.records.forEach((record) => {
          console.log(record._fields);
          result_string += record._fields + ' ';

      });
      return callback(null, result_string);
  })
  .catch((e) => {
      return callback('error : ' + JSON.stringify(e)));
   })
  }

 module.exports = {
     findEmail
 };

然后在test.js:

var tester = require('./db');
tester.findEmail("testemail@yahoo.com", (err, temp) => {
 if (err) return console.error(err);
 console.log(temp); 
} );

这背后的想法是db文件中的所有流都是异步的。

因此,为了捕获结果,您需要传递函数callback,该函数将在异步流程完成时触发。