使用 findOne() 时 NeDB 没有回调

Posted

技术标签:

【中文标题】使用 findOne() 时 NeDB 没有回调【英文标题】:NeDB not calling back when using findOne() 【发布时间】:2021-07-08 21:12:17 【问题描述】:

我正在为我崭露头角的 Alexa 技能创建 OAuth 2.0 服务,当我使用 NeDB 从客户端数据库获取客户端时,没有回调。

getClient()

module.exports.getClient = async (clientId, clientSecret) => 
    let params = clientId
    let result;
    console.log("get client")
    function findClient(params) 
        return new Promise((resolve, reject) => 
            console.log(params)
            clients.loadDatabase()
            console.log('loaded')
            clients.findOne(params, function(err, doc)  // no callback here
                console.log('before reject')
                if (err) return reject(err)
                console.log("callback")
                if (doc.clientSecret) 
                    let secret = doc.clientSecret
                    let id = doc.clientId
                    resolve(clientSecret: secret, clientId: id)
                 else 
                    resolve(clientId: doc.oauth.clientId)
                
            )
            console.log('does it even exec?')
        )
    
    console.log(clientSecret)
    if (clientSecret) 
        params.clientSecret = clientSecret
    
    result = await findClient(params)
    console.log(result)
    return result;

这是我提出的要求:

client_id=1
client_secret=secret123
username=testUser
password=testPass

最后是特快路线:

app.post('/oauth/authenticate', (req, res, next) => 
    users.findOne(name: req.body.username, (err, doc) => 
      if (err) throw err;
      req.body.user = doc

      next();
    )
  , oauth.authorize(
    authenticateHandler: 
      handle: req => 
        return req.body.user
      
    
  ))

编辑:在加载数据库时添加回调时,出现此错误:

loadDatabase Error: More than 10% of the data file is corrupt, the wrong beforeDeserialization hook may be used. Cautiously refusing to start NeDB to prevent dataloss

谢谢!

【问题讨论】:

您的特快专线电话不是getClient吗?或者getClient和显示的快速回调之间应该是什么关系? 我正在使用一个名为 express-oauth2-server 的快速包装器。您可以查看包裹here。 “没有回调”是否意味着它既不记录before reject也不记录callback,对吗? 正确。它记录“它甚至执行吗?”但没有“回调” 谢谢。那行得通。 【参考方案1】:

清除我的数据库并再次插入数据修复它

【讨论】:

以上是关于使用 findOne() 时 NeDB 没有回调的主要内容,如果未能解决你的问题,请参考以下文章

mongodb高级查询

mongoose.findOne() 后数组被清除

基于先前调用的响应的异步调用,避免回调地狱

NodeJS nedb 函数不等待

在 nedb 中添加的记录是单一的,但为啥 VUE 会多次存储相同的记录?

Electron-Vue中操作本地数据库NeDB