gpt4 book ai didi

mongodb - Node.js 和 Mongodb - TypeError : undefined is not a function

转载 作者:可可西里 更新时间:2023-11-01 09:26:31 25 4
gpt4 key购买 nike

我和我的 friend 正在尝试使用 Node.js 和 MongoDB 创建一个基本的网络应用程序,但我们在尝试连接到数据库时遇到了问题。我们收到的错误如下:

C:\Users\James Kienle\Dropbox\Apps\Azure\Hanky-Ranky\server.js:24mongoClient.open(function(err, mongoClient) {//C ^TypeError: undefined 不是一个函数 在对象。 (C:\Users\James Kienle\Dropbox\Apps\Azure\Hanky-Ranky\server.js:24:13) 在 Module._compile (module.js:460:26) 在 Object.Module._extensions..js (module.js:478:10) 在 Module.load (module.js:355:32) 在 Function.Module._load (module.js:310:12) 在 Function.Module.runMain (module.js:501:10) 在启动时 (node.js:129:16) 在 node.js:814:3

这是 server.js,我们的主要文件

// Bring in required references
var http = require('http'),
express = require('express'),
path = require('path'),
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server,
CollectionDriver = require('./collectionDriver').CollectionDriver;

// Set the default port for the app
var port = process.env.PORT || 1337;

// Create the new express app and set all required variables such as port and static html path
var app = express();
app.set('port', port);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// Connect to MongoDB
var mongoHost = 'ds040898.mongolab.com'; //A
var mongoPort = 40898;
var collectionDriver;

var mongoClient = new MongoClient(new Server(mongoHost, mongoPort)); //B
mongoClient.open(function(err, mongoClient) { //C
if (!mongoClient) {
console.error("Error! Exiting... Must start MongoDB first");
process.exit(1); //D
}
var db = mongoClient.db("MongoLab-0"); //E
db.authenticate('testuser', 'testpassword', function(err, result) {
collectionDriver = new CollectionDriver(db); //F
});
});

// Set up the expressjs public path
app.use(express.static(path.join(__dirname, 'public')));

// BRING IN THE DATA
app.get('/:collection', function(req, res) { //A
var params = req.params; //B
collectionDriver.findAll(req.params.collection, function(error, objs) { //C
if (error) { res.send(400, error); } //D
else {
if (req.accepts('html')) { //E
res.render('data',{objects: objs, collection: req.params.collection}); //F
} else {
res.set('Content-Type','application/json'); //G
res.send(200, objs); //H
}
}
});
});

app.get('/:collection/:entity', function(req, res) { //I
var params = req.params;
var entity = params.entity;
var collection = params.collection;
if (entity) {
collectionDriver.get(collection, entity, function(error, objs) { //J
if (error) { res.send(400, error); }
else { res.send(200, objs); } //K
});
} else {
res.send(400, {error: 'bad url', url: req.url});
}
});

// Pull the template for a 404 page
app.use(function (req,res) {
res.render('404', {url:req.url});
});

// Create the node server
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

这是 CollectionDriver.js

// Import the required MongoDB Packages
var ObjectID = require('mongodb').ObjectID;

// Define the CollectionDriver constructor method for later use
CollectionDriver = function(db) {
this.db = db;
};

// Fetch a collection by name
CollectionDriver.prototype.getCollection = function(collectionName, callback) {
this.db.collection(collectionName, function(error, the_collection) {
if( error ) callback(error);
else callback(null, the_collection);
});
};

// Return all found objects
CollectionDriver.prototype.findAll = function(collectionName, callback) {
this.getCollection(collectionName, function(error, the_collection) { //A
if( error ) callback(error);
else {
the_collection.find().toArray(function(error, results) { //B
if( error ) callback(error);
else callback(null, results);
});
}
});
};

// Obtain and display a single item vie _id
CollectionDriver.prototype.get = function(collectionName, id, callback) { //A
this.getCollection(collectionName, function(error, the_collection) {
if (error) callback(error);
else {
var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$"); //B
if (!checkForHexRegExp.test(id)) callback({error: "invalid id"});
else the_collection.findOne({'_id':ObjectID(id)}, function(error,doc) { //C
if (error) callback(error);
else callback(null, doc);
});
}
});
};

exports.CollectionDriver = CollectionDriver;

这是我们的 package.json 文件。据我所知,此文件中列出的所有依赖项均已正确安装

{
"name": "hanky-ranky",
"version": "1.0.0",
"private": true,
"dependencies": {
"express": "4.13.3",
"jade": "1.11.0",
"mongodb":"2.0.42"
}
}

如果有帮助,我正在尝试遵循此网站的教程:http://www.raywenderlich.com/61078/write-simple-node-jsmongodb-web-service-ios-app

谢谢大家!非常感谢您的帮助!

最佳答案

教程中使用的mongodb版本为1.3.23。你的 mongodb 版本是 2.0.42。似乎实现已更改。

这是在 2.0 版本中连接到 mongodb 的方式:

var MongoClient = require('mongodb').MongoClient;
// Connection url
var url = 'mongodb://localhost:27017/test';
// Connect using MongoClient
MongoClient.connect(url, function(err, db) {
// Use the admin database for the operation
var adminDb = db.admin();
// List all the available databases
adminDb.listDatabases(function(err, dbs) {

});
});

您必须稍微更改代码才能使用新版本,否则您将必须安装 mongodb 1.3.23。

您可以在以下位置获得更多详细信息:http://mongodb.github.io/node-mongodb-native/2.0/

关于mongodb - Node.js 和 Mongodb - TypeError : undefined is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com