【问题标题】:Getting "TypeError: Cannot read property 'collection' of undefined"获取“TypeError:无法读取未定义的属性'集合'”
【发布时间】:2018-01-31 01:30:33
【问题描述】:

下面附上文件夹目录、server.js 和 api.js 文件。程序没有运行,给我这样的错误:

ReferenceError: dbo is not defined
    at C:\shivapp\mean_app\mandiapp\server\api.js:18:1
    at Layer.handle [as handle_request] (C:\shivapp\mean_app\mandiapp\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\shivapp\mean_app\mandiapp\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\shivapp\mean_app\mandiapp\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\shivapp\mean_app\mandiapp\node_modules\express\lib\router\layer.js:95:5)
    at C:\shivapp\mean_app\mandiapp\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\shivapp\mean_app\mandiapp\node_modules\express\lib\router\index.js:335:12)
    at next (C:\shivapp\mean_app\mandiapp\node_modules\express\lib\router\index.js:275:10)
    at Function.handle (C:\shivapp\mean_app\mandiapp\node_modules\express\lib\router\index.js:174:3)
    at router (C:\shivapp\mean_app\mandiapp\node_modules\express\lib\router\index.js:47:12).

文件夹目录

文件-> server.js

var express=require('express');
var bodyParser=require('body-parser');
var path=require('path');
var http = require('http');
var app=express();


var api= require('./server/api');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));

app.use(express.static(path.join(__dirname,'dist')));

app.use('/',api);
//8376884527
app.get('*'),(req,res) => {

    res.sendFile(path.join(__dirname,'dist/index.html'));
}   




var port= process.env.port || '3000';

app.set('port',port);

var server = http.createServer(app);

server.listen(port,()=>console.log('server running...'));

文件 -> api.js

 var express = require('express');
 var router = express.Router(); 



var MongoClient = require('mongodb').MongoClient;
var ObjectID = require('mongodb').ObjectID;

var dbo;

MongoClient.connect("mongodb://localhost:27017/mandiapp", function(err, db) {
  if(err) throw err;
    var dbo = db.db("mandiapp");
});

router.get('/users', function(req, res) {

dbo.collection("user").find({}).toArray(function(err, result) {
    if (err) throw err;
    res.json(result);
    //dbo.close();
  })
})

router.get('/recent', function(req, res) {
  var collection = db.get().collection('comments')

  collection.find().sort({'date': -1}).limit(100).toArray(function(err, docs) {
    res.render('comments', {comments: docs})
  })
})



module.exports = router

【问题讨论】:

  • 在您的文本标题或问题中避免使用“请帮助”、“请帮助”或“紧急”。一个格式良好的问题+标签就足够了。

标签: angularjs node.js


【解决方案1】:

您看到的错误是因为变量 dbo 没有定义,正如错误所暗示的那样。

您的问题是以下代码:

MongoClient.connect("mongodb://localhost:27017/mandiapp", function(err, db) {
  if(err) throw err;
    var dbo = db.db("mandiapp");
});

您在回调函数中定义了变量dbo,该变量在此范围之外不可用。您应该在其他地方定义它并在此处分配给它。

如果不清楚,请参阅下面的修复。

var express = require('express');
var router = express.Router(); 


var MongoClient = require('mongodb').MongoClient;
var ObjectID = require('mongodb').ObjectID;
var dbo = undefined;


MongoClient.connect("mongodb://localhost:27017/mandiapp", function(err, db) {
  if(err) throw err;
    dbo = db.db("mandiapp");
});

router.get('/users', function(req, res) {

dbo.collection("user").find({}).toArray(function(err, result) {
    if (err) throw err;
    res.json(result);
    //dbo.close();
  })
})

router.get('/recent', function(req, res) {
  var collection = db.get().collection('comments')

  collection.find().sort({'date': -1}).limit(100).toArray(function(err, docs) {
    res.render('comments', {comments: docs})
  })
})



module.exports = router

您稍后将在代码中查找更多未定义变量,例如 /recent 获取处理程序中的 collectiondb

【讨论】:

  • 现在。我收到这个错误,例如...TypeError: Cannot read property 'collection' of undefined
  • 那是因为你和你刚刚修复的问题一样,看答案的最后一行。
  • 请给我正确的答案.....你能帮我制作不同的数据库连接文件吗..
  • 我给了你正确的答案,你应该尝试自己修复它。我给你修了一个,其余的都是一样的。
【解决方案2】:

请查看link

删除行:var dbo = db.db("mandiapp");

var db = MongoClient.connect('mongodb://localhost:27017/mandiapp', function(err, db) {
    if(err)
        throw err;
    console.log("connected to the mongoDB !");
});

db.collection("user").find({}).toArray(function(err, result) {
    if (err) throw err;
    res.json(result);
    //dbo.close();
  })
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2020-07-23
    • 2021-07-08
    相关资源
    最近更新 更多