在响应中获取空数组res.json();在nodejs代码中

时间:2019-06-26 19:19:36

标签: node.js json mongodb express mongoose

为什么res.json用空数组响应?     我想从馆藏分销商那里获取所有数据,因此我有      创建模型文件,然后将其分配给变量Distributordata

服务器文件:app.js

var express=require('express');
var app=express();
var bodyParser=require('body-parser');
var mongoose=require('mongoose');
var Distributordata=require('./distributor.model');

var db='mongodb://localhost/Distributordata';

mongoose.connect(db);

var port=8080;

app.get('/',function(req,res){
res.send("happy to be here");  
});

 app.get('/distributor',function(req,res){
// res.send("hi from distributors")
 console.log("getting all distributors");
 Distributordata.find(function(err,distributordata){
      if(err){
        res.send("error has occured");
      }
      else{
          console.log(distributordata);
         res.send(distributordata);
     }
  });
 });

   app.listen(port,function(){
   console.log('app listening on port'+port);
  });

模型文件:distributor.model.js

  var mongoose=require('mongoose');
 var Schema = mongoose.Schema;

 var DistributorSchema=new Schema({
  dname:String,
  daddress: String
  });

  module.exports=mongoose.model('Distributordata',DistributorSchema);

输出

在cmd上:

app listening on port8080

  getting all distributors

   [ ]

1 个答案:

答案 0 :(得分:0)

到目前为止,我已经理解您的问题是您正在mongodb中以集合名称distributor自己创建集合。另外,由于您没有发送任何后期请求,因此您的代码也不会在主数据库中自动创建任何集合。

但是,默认情况下,猫鼬总是通过使模型名称复数来创建集合名称,在您的情况下,该集合名称为 distributordatas 。但是,当您尝试从数据库中获取数据时,它正以 distributor 的形式获得集合名称,因此,它无法建立连接。但是您可以根据需要使用 force 命名约定来进行收集。

在您的 distributor.model.js 文件中,将以下代码行更改为此代码:

module.exports = mongoose.model('Distributordata', DistributorSchema, 'distributor');

希望它能解决您的问题。有关更多参考,请查看https://mongoosejs.com/docs/guide.html#collection