2016-07-23 19 views
3

我使用pg-promise模块为Node创建了一个单独的文件,其中包含我的所有查询。虽然对于他们中的大多数,我只是在查询后使用req, res,因为我想返回一个值。这是行不通的。它返回undefinedpg-promise中的退货

passportLogin: (email)=> { 
     db.one(`SELECT userid 
       FROM user`) 
      .then(result => { 
       return result; 
      }) 
      .catch(error => { 
       return error; 
      }); 
    } 
+0

你定义了一个没有返回值的函数,那么你期望什么?在'db.one()'之前添加'return',你应该得到承诺。 – Sirko

+0

在db.one()之前添加'return'并去除其他两个'return'将返回一个空对象。 – ocram

+0

你的'then()'和'catch()'在这里几乎没什么用处,所以把它们全部扔掉。 – Sirko

回答

1

该代码具有在同一时间两个问题:

  • 无效的承诺使用,里面的时候你做return result.catch,这不是承诺废品的处理方式,则必须提供错误处理,或重新抛出/重新拒绝错误。
  • 无效使用pg-promise库。当使用方法one时,应该拒绝除1记录以外的任何其他记录,as per the method's documentation,同时你说的是I need to catch if it returns more than one row...,这是一个合乎逻辑的矛盾。

它的结果如下:查询成功执行,并返回一个以上的记录,这反过来又使法one拒绝,然后你把拒绝的理由并通过这样做把它变成一个解决一个return result。总之,你的代码在各处都被打破了。

首先,pg-promise根据您期待的记录数,您应该使用正确的方法,请参见The Basics

然后根据您的业务逻辑处理.then/.catch。我不能在这里更具体,因为你没有提供这方面的更多细节。