Почему я получаю «неопределенный» по моему запросу в Node и Mongo?

#node.js #mongodb #api #express #crud

Вопрос:

Я создаю свой первый API, который я использовал .env для переменных базы данных в этом URL:

 const uri = `mongodb srv://${mongo_user}:${mongo_pwd}@cluster0.ynvbj.mongodb.net/${mongo_db}?retryWrites=trueamp;w=majority`
 

затем создал клиента:

 const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true })
 

Затем основная функция, которая вызывает функции, которые находят данные от пользователей, подобных Mongo:

 async function main() {
      try {
             await client.connect();
             await  getUser(client, 'users', mongo_db);
        } catch (e) {
            console.error(e);
        } finally {
            await client.close();
        }
}
    
main().catch(console.err);

//------GET
//user by Dni
async function getUser(client, coll, mongo_db){
      const collection = await client.db(`${mongo_db}`).collection(`${coll}`)
      .find({dni: 38383838}).toArray(function(err, results) {
            console.log(results);
            return results;
         })
   };
 

И, наконец, я создал маршруты, но я получаю undefined . Я все проверил и не понял, что не так.

     const {getUser, getOrder, getProducts} = require('./db_connection')
    const {Router} = require('express')
    const router = Router()
   
    //GET
    //get user
    router.get('/users', async (req, res) => {
       let data = await getUser;
       res.json({data});
    })

module.exports = router;
 

И это app.js

 const express = require('express')
const app = express()
require('dotenv').config();

//settings
app.set('port', process.env.PORT || 3000)

//middlewares
app.use(express.urlencoded({extended:false}))
app.use(express.json())

//server
 app.listen(app.get('port'), ()=> {
    console.log(`Server running on port ${app.get('port')}`)
})

//require api
app.use('/api', require('./api_routes'))
 

Комментарии:

1. Пожалуйста, отредактируйте свой вопрос и добавьте свой код как код, а не как изображения.

2. Привет, вы можете предоставить свой код в качестве кода вместо изображений. Кроме того, вы можете предоставить трассировку стека и строку, которая дает вам «неопределенное», пожалуйста

3. @Dominik Привет, я отредактировал вопрос с кодом, спасибо. Это в терминале, и я не вижу данных json на локальном хост-сервере, работающем на порту 3002, не определено

4. @TheBritishAreComing Конечно, я отредактировал, чтобы вы могли увидеть код. Терминал показывает: Сервер, работающий на порту 3002, не определен

5. Строка let data = await getUser; не выполняет функцию и не передает аргументы, которые вы ожидаете. Это должно быть let data = await getUser(client, coll, mongo_db);

Ответ №1:

Похоже, ваши результаты не определены, это может быть по множеству разных причин.

Там, где у вас есть console.log(results) , вы можете заменить это на console.debug(err, results);

Это может дать вам больше понимания причины, по которой он не получает результатов.

 async function getUser(client, coll, mongo_db){
      const collection = await client.db(`${mongo_db}`).collection(`${coll}`)
      .find({dni: 38383838})
      .toArray(function(err, results) {
            console.debug(err, results);
            return results;
         })
   };
 

Комментарии:

1. Omg вот что я получил: MongoExpiredSessionError: Не удается использовать сеанс, который закончился. Я думаю, что это может быть версия Монго ! я попробую обновить его.