【问题标题】:Why do i get 'undefined' at my request in Node and Mongo?为什么我在 Node 和 Mongo 的请求中得到“未定义”?
【发布时间】:2021-11-19 03:25:03
【问题描述】:

我正在创建我的第一个 API,我在这个 url 中使用 .env 作为数据库变量:

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

然后创建客户端:

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

然后,一个 main 函数调用从 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'))

【问题讨论】:

  • 请编辑您的问题并将您的代码添加为代码而不是图像。
  • 您好,您能否将您的代码作为代码而不是图像提供。另外,您能否提供一个堆栈跟踪以及给您“未定义”的行
  • @Dominik 嗨,我用代码编辑了问题,谢谢。这是在终端中,我在 localhost 服务器中看不到 json 数据在端口 3002 上运行 undefined
  • @TheBritishAreComing 当然,我已经编辑,所以你可以看到代码。终端显示:Server running on port 3002 undefined
  • let data = await getUser; 行不执行函数,也不传递您期望的参数。必须是let data = await getUser(client, coll, mongo_db);

标签: node.js mongodb api express crud


【解决方案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;
         })
   };

【讨论】:

  • 天哪,这就是我得到的:MongoExpiredSessionError:无法使用已结束的会话。我想这可能是 Mongo 的版本!我会尝试升级它。
猜你喜欢
  • 2021-11-18
  • 2022-01-10
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2021-03-24
  • 2015-03-23
  • 2012-02-05
相关资源
最近更新 更多