nodejs-将查询结果导出到其他文件

时间:2018-07-20 16:13:12

标签: node.js asynchronous

我正在做一些查询以从数据库中检索一些数据,并试图导出要在我的nodejs应用程序中使用的数据。但是到目前为止,我所做的一切都无法正常工作。

r.js

async function site() {
  var test = await db
    .select("*")
    .from("site_credentials")
    .then(data => {
      return data;
    });

  return test;
}

module.exports = { user: site().then(data=>{return data})}

但是我总是要等待Promise。甚至当我进行导入时:

import users = require("./r")

users.then(data=>{return data})

,仍然不起作用。我该如何解决?

谢谢

1 个答案:

答案 0 :(得分:1)

对于初学者来说,没有理由解决承诺并立即返回在then块中解决的同一对象。如果您不需要执行其他任何操作,则只需省略“ then”即可。

所以这个:

async function site() {
  var test = await db
    .select("*")
    .from("site_credentials")
    .then(data => {
      return data;  <--- this isn't necessary.  Only adds noise unless there is something else you need to do.  It's similar to "catching" and immediately "rethrowing" an error... just pointless
    });

  return test;
}

可以是这样:

async function site() {
  var test = await db
    .select("*")
    .from("site_credentials");    
  return test;
}

第二,我不确定您为什么要尝试在导出中解决它。只需导出函数即可。

module.exports = site;

然后,当您在应用程序中的其他位置需要它时,请调用它并在那里解决它:

const users = require("./r")

users.then(data=>{
  // do something with your data here...
})

请注意,在第一个示例中,您正在导出一个对象,该对象包含函数的“ users”属性。如果这样做,则需要像这样调用它:

const users = require("./r")

users.users().then(data=>{
  // do something with your data here...
})

您可以看到users.users显然没有意义。因此,请正确导出以避免这种情况。仅导出函数本身,而不嵌套在其他对象中。

但是,如果仔细观察,您会注意到我做错的另一件事。我正在导出“站点”功能,但需要将其作为“用户”功能。命名约定很重要。如果此函数在此处称为“站点”,则应要求(或根据模块加载程序导入...)将其作为“站点” ...因此:

const site = require('./r');

否则,您只会混淆其他开发人员的初衷。