Javascript 错误:集合名称必须是节点js中的字符串

Javascript 错误:集合名称必须是节点js中的字符串,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我试图在服务器上运行以下代码 var express = require("express"), app = express(), bodyParser = require('body-parser'), errorHandler = require('errorhandler'), methodOverride = require('method-override'), hostname = process.env.HOSTNAME || 'localh

我试图在服务器上运行以下代码

var express = require("express"),
    app = express(),
    bodyParser = require('body-parser'),
    errorHandler = require('errorhandler'),
    methodOverride = require('method-override'),
    hostname = process.env.HOSTNAME || 'localhost',
    port = parseInt(process.env.PORT, 10) || 4004,
    publicDir = process.argv[2] || __dirname + '/public';
var exec = require('child_process').exec;
var fs = require('fs');
 var mongodb = require('mongodb'),
    serverdb = new mongodb.Server('127.0.0.1', 27017, {}),
    dbName = new mongodb.Db('prisync', serverdb, {});
var url = "urlinfo";


//Show homepage
app.get("/", function (req, res) {
  //res.redirect("/index.html");
  console.log("shubham ");
  dbName.open(function (error, client){
      var collection = new mongodb.Collection(client , url);   //line 24 ====
      collection.find().limit(20).toArray(function (err, dataObjArr){
        var data = '';
        var dataArr = [];
        var i = dataObjArr.length;
        //check for error
        if(err){return res.end('error!'+err);}
        //Data
        if(dataObjArr){
          while(i--){
            dataArr[i] = dataObjArr[i]._id;
          }
          data = dataArr.join(' ');
          res.render('/index.html',{ returnedData : data });
        }else{
          res.end();
        }

      });


      });
  });



app.get("/search", function (req, res){
  console.log("shubham batra");
   var pro_name = req.query.name;
   var pro_code = req.query.code;
   var pro_category = req.query.category;
   var pro_brand = req.query.brand;

 pro_name = pro_name+"";
 pro_code = pro_code+"";
 pro_brand = pro_brand+"";
 pro_category = pro_category+"";



  MongoClient.connect('mongodb://127.0.0.1:27017/prisync', function(err, db) {
  if (err) throw err;
    console.log("Connected to Database");


    var documen = {name:pro_name, code:pro_code , category:pro_category, brand:pro_brand };
     //documen = JSON.stringify(documen);
  //insert record
  db.collection('urlinfo').insert(documen, function(err, records) {
    if (err) throw err;

    });

  res.redirect("/index.html");

});
});
//Search page
app.use(methodOverride());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(express.static(publicDir));
app.use(errorHandler({
  dumpExceptions: true,
  showStack: true
}));

console.log("Server showing %s listening at http://%s:%s", publicDir, hostname, port);
app.listen(port);
但在尝试加载localhost:4004

Server showing/home/shubham/Music/pricesync/Server/public listing athttp://localhost:4004
舒巴姆
/home/shubham/node_modules/mongodb/lib/server.js:274
process.nextTick(函数(){throw err;})
^
错误:集合名称必须是字符串
错误()
在checkCollectionName(/home/shubham/node_modules/mongodb/lib/utils.js:69:11)
在新集合中(/home/shubham/node_modules/mongodb/lib/Collection.js:57:3)
在/home/shubham/Music/pricesync/server/server.js:24:24
at/home/shubham/node_modules/mongodb/lib/db.js:221:5
在connectHandler(/home/shubham/node_modules/mongodb/lib/server.js:272:7)
在g(events.js:180:16)
在发出时(events.js:95:17)
at/home/shubham/node_modules/mongodb/node_modules/mongodb core/lib/topologies/server.js:399:23
at/home/shubham/node_modules/mongodb/node_modules/mongodb core/lib/topologies/server.js:756:13

假设集合名称在'url'变量中(即'urlinfo'),则实例化集合的正确方法是:

var collection = dbName.collection(url); //line 24

如果您查看文档,它特别指出不应直接实例化集合类:

假设集合名称在'url'变量中(即'urlinfo'),则实例化集合的正确方法是:

var collection = dbName.collection(url); //line 24

如果您查看文档,它特别指出集合类不应直接实例化:

我在解决Guillermos Smashing Node.JS书中的练习时遇到了相同的情况

我按照Richard Andreus的指示,经过几次尝试,成功地建立了服务器

我新定义了

var Db = require('mongodb').Db,
    Server = require('mongodb').Server;
而不是现有的变量定义。 接下来我定义了变量db

var db = new Db('test', new Server('localhost', 27017));
然后打开到db的连接,或者在您的示例中是dbName

db.open(function(err, db) {
  var collection = db.collection(url);
// in my case I defined app.users instead of collection

注意:不要忘记您在dbName中的定义

在解决Guillermos Smashing Node.JS书中的练习时,我遇到了相同的情况

我按照Richard Andreus的指示,经过几次尝试,成功地建立了服务器

我新定义了

var Db = require('mongodb').Db,
    Server = require('mongodb').Server;
而不是现有的变量定义。 接下来我定义了变量db

var db = new Db('test', new Server('localhost', 27017));
然后打开到db的连接,或者在您的示例中是dbName

db.open(function(err, db) {
  var collection = db.collection(url);
// in my case I defined app.users instead of collection

注意:别忘了dbName的定义

我也有同样的错误,对我来说,这是由于时间戳放置不正确造成的


错误代码:

    }),{timestamps:true});


更正代码:

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

var User = mongoose.model('User', new mongoose.Schema({
    email:{type:String, required:true},
    password:{type:String, required:true},

    listings:[{type:ObjectId,ref:"Listings"}]

},{timestamps:true}));


我也有同样的错误,对我来说,这是由于我的时间戳放置不正确造成的


错误代码:

    }),{timestamps:true});


更正代码:

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

var User = mongoose.model('User', new mongoose.Schema({
    email:{type:String, required:true},
    password:{type:String, required:true},

    listings:[{type:ObjectId,ref:"Listings"}]

},{timestamps:true}));


能否请您详细说明您的答案,并添加有关您提供的解决方案的更多描述?能否请您详细说明您的答案,并添加有关您提供的解决方案的更多描述?