簡體   English   中英

當我使用 Nodejs 中的 mongodb 引擎向 MongoDB 數據庫發出請求時,我得到未定義的值

[英]I get undefined value when I make a request to the MongoDB database using the mongodb engine in Nodejs

我正在使用 ExpressJS 和 MongoDB 為自己創建一個博客。 我用mongodb 模塊創建了一個迷你庫來請求 MongoDB 數據庫。

這是圖書館:

'use strict'

const { MongoClient, ObjectId } = require('mongodb')
const { config } = require('../config')

const USER = encodeURIComponent(config.mongodb.user)
const PASS = encodeURIComponent(config.mongodb.pass)
const NAME = config.mongodb.name
const HOST = config.mongodb.host

const URL = `mongodb+srv://${USER}:${PASS}@${HOST}/${NAME}?retryWrites=true&w=majority`
const OPTIONS = {
  useNewUrlParser: true,
  useUnifiedTopology: true
}

class MongoLib {
  constructor () {
    this.client = new MongoClient(URL, OPTIONS)
    this.name = NAME
  }

  connect () {
    if (!MongoLib.connection) {
      MongoLib.connection = new Promise((resolve, reject) => {
        this.client.connect(err => {
          if (err) reject(err)
          console.log('Connected successfully to MongoDB.')
          resolve(this.client.db(this.name))
        })
      })
    }

    return MongoLib.connection
  }

  getAll (collection, query) {
    return this.connect().then(db => {
      return db.collection(collection).find({ query }).toArray()
    })
  }

  get (collection, id) {
    return this.connect().then(db => {
      return db.collection(collection).findOne({ _id: ObjectId(id) })
    })
  }

  create (collection, data) {
    return this.connect().then(db => {
      return db.collection(collection).insertOne(data)
    }).then(result => result.insertedId)
  }

  update (collection, id, data) {
    return this.connect().then(db => {
      return db.collection(collection).updateOne({ _id: ObjectId(id) }, { $set: data }, { upsert: true })
    }).then(result => result.upsertedId || id)
  }

  delete (collection, id) {
    return this.connect().then(db => {
      return db.collection(collection).deleteOne({ _id: ObjectId(id) })
    }).then(() => id)
  }
}

module.exports = MongoLib

數據庫連接正確,因為我有一個種子,它使用您剛剛看到的庫的 create 方法將數據注入數據庫。

在服務層,我創建了一個類,它有一個名為getUser的方法,它將調用 MongoDB 庫的 getAll 方法,我們向它傳遞一個查詢,以便它查找用戶。

'use strict'

const MongoLib = require('../lib/mongo')
const bcrypt = require('bcrypt')

class UsersService {
  constructor () {
    this.collection = 'users'
    this.mongoDB = new MongoLib()
  }

  async getUser ({ email }) {
    // { email } is getted by basic authentication as a "username" to login
    // I am receiving this data perfectly
    const [user] = await this.mongoDB.getAll(this.collection, { email })
    // But the problem start here, the value of user is undefined
    return user
  }

  async createUser ({ user }) {
    const { name, email, password } = user
    const hashedPassword = await bcrypt.hash(password, 10)

    const createUserId = await this.mongoDB.create(this.collection, {
      name,
      email,
      password: hashedPassword
    })

    return createUserId
  }
}

module.exports = UsersService

這里的問題是用戶值是未定義的。 我不明白為什么它會引起沖突。 我正在使用 async-await 等待數據庫請求完成,並且數據正確地在數據庫中。

有沒有人知道這個錯誤? 如果需要更多信息,請告訴我。

懷疑您的查詢有誤,您正在向 mongodb 發送 { { email: email } }

  getAll (collection, query) {
    return this.connect().then(db => {
      return db.collection(collection).find(query).toArray()
    })
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM