首页 > 解决方案 > MongoDB 通过节点查询返回可见结果,但 Postgres 没有?

问题描述

我一直在使用 mongoose 在节点中使用 mongoDB。当对路由(例如 localhost:7000/restaurants)发出 GET 请求并显示一个充满匹配对象的数组时,将对 mongoose 进行以下查询

async func() {
    return this.Restaurants.find({$or: [{city: somecity}, {postal_code: somepostalcode}]}).then(result => {
        return result;
    })
}

我使用 postgres 尝试了类似的事情,但是,调用它不会在浏览器上返回任何内容,但已成功登录到控制台:

async func(){
    return await client.query(`SELECT * FROM restaurants WHERE city = '${somecity}' OR postal_code = '${somepostalcode}';`, (err, res) => {
        console.log(res.rows);
        return res.rows;
    })
}

如果它们似乎都返回相同类型的对象,为什么会发生这种情况?有没有办法让 postgres 结果可见?

感谢您的帮助!

标签: node.jsmongodbpostgresqlrest

解决方案


这很可能是因为 postgres API 是基于回调的。您需要将回调包装在 promise 中,并在 resolve 中返回查询响应。将代码更新为以下内容应该会有所帮助:

async func(){
  return new Promise((resolve, reject) => {
    client.query(`SELECT * FROM restaurants WHERE city = '${somecity}' OR postal_code = '${somepostalcode}';`, (err, res) => {
      if(err) {
        return reject(err)
      }
      
      return resolve(res.rows);
    })
  })
}

推荐阅读