[MONGODB] 형식 오류가 : db.collection는 함수가 아닙니다
MONGODB형식 오류가 : db.collection는 함수가 아닙니다
나는 MLAB에 만든 것으로 데이터베이스에 데이터를 게시하려고 내가이 오류를 얻고있다 그러나 나는 무슨이이 주제에 틀렸어도 읽고 이전에 묻는 질문에가는 모르지만 나는 나의 오류를 해결할 수 아니다 나는이 새로운 오전. 그래서 여기 내가 구현하려고 코드를 게시하고 있는데 그것은이 튜토리얼 https://medium.freecodecamp.com/building-a-simple-node-js-api-in-under-30-minutes-에서 가져옵니다 a07ea9e390d2.
server.js
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const bodyParser = require('body-parser');
const db = require('./config/db');
const app = express();
const port = 8000;
app.use(bodyParser.urlencoded({extened:true}));
MongoClient.connect(db.url,(err,database) =>{
if (err) return console.log(err)
require('./app/routes')(app,{});
app.listen(port,() => {
console.log("We are live on"+port);
});
})
db.js
module.exports = {
url : "mongodb://JayTanna:Jay12345@ds147510.mlab.com:47510/testing"
};
하는 index.js
const noteroutes = require('./note_routes');
module.exports = function(app,db)
{
noteroutes(app,db);
};
note_routes.js
module.exports = function(app, db) {
app.post('/notes', (req, res) => {
const note = { text: req.body.body, title: req.body.title };
db.collection('notes').insert(note, (err, result) => {
if (err) {
res.send({ 'error': 'An error has occurred' });
} else {
res.send(result.ops[0]);
}
});
});
};
해결법
-
==============================
1.당신은 무엇을 당신의 경로 /하는 index.js 내보내기 기능을 예상하는 등 두 번째 인수로 데이터베이스를 전달할 필요가 어디 server.js에서는 빈 객체를 전달합니다.
당신은 무엇을 당신의 경로 /하는 index.js 내보내기 기능을 예상하는 등 두 번째 인수로 데이터베이스를 전달할 필요가 어디 server.js에서는 빈 객체를 전달합니다.
PFB 업데이트 server.js :
const express = require('express'); const MongoClient = require('mongodb').MongoClient; const bodyParser = require('body-parser'); const db = require('./config/db'); const app = express(); const port = 8000; app.use(bodyParser.urlencoded({extended:true})); MongoClient.connect(db.url,(err,database) =>{ if (err) return console.log(err) //require('./app/routes')(app,{}); //check below line changed require('./app/routes')(app, database); app.listen(port,() => { console.log("We are live on"+port); }); });
-
==============================
2.나는 그것을 시도하기 때문에 단지 2.2.33를 MongoDB를 아래로 이동라고 대답 투표하고 일했다, 그러나 나는 이상한 느낌 그래서 난 당신이 버전을 유지할 수있는 솔루션을 찾을 수 있도록 단지 문제를 해결하기 위해 다운 그레이드에 대한> = 3.0. 사람이이 문제를 발견하고 자신의 문제는 허용 대답과 같은 빈 참조를 전달하지 않은 경우, 출력이 해결 방법을 시도해보십시오.
나는 그것을 시도하기 때문에 단지 2.2.33를 MongoDB를 아래로 이동라고 대답 투표하고 일했다, 그러나 나는 이상한 느낌 그래서 난 당신이 버전을 유지할 수있는 솔루션을 찾을 수 있도록 단지 문제를 해결하기 위해 다운 그레이드에 대한> = 3.0. 사람이이 문제를 발견하고 자신의 문제는 허용 대답과 같은 빈 참조를 전달하지 않은 경우, 출력이 해결 방법을 시도해보십시오.
당신은 실행하면 ..
MongoClient.connect(db.url,(err,database) =>{ }
MongoDB의 버전> = 3.0, 즉 데이터베이스 변수는 ( '무엇이든') database.collection에 액세스하려고하는 객체의 부모 객체는 실제로. 올바른 개체에 액세스하려면 수행하여였습니다 나를 위해, 데이터베이스 이름을 참조 할 필요가
MongoClient.connect(db.url,(err,database) =>{ const myAwesomeDB = database.db('myDatabaseNameAsAString') myAwesomeDB.collection('theCollectionIwantToAccess') }
내 Node.js를 서버를 실행할 때이 희망이 그들의 버전을 다운 그레이드하지 않는 사람을 도움이, 내 오류를 해결했습니다.
(당신이 어떤 이유로 당신의 DB 이름을 모르는 경우도, 단지을 console.log (데이터베이스를 할) 당신은 객체의 속성으로 볼 수 있습니다)
EDIT (2018 월) :
이에 따라, 콜백 실제로 데이터베이스에 연결된 클라이언트 대신 데이터베이스 자체를 반환합니다.
따라서 데이터베이스 인스턴스를 얻기 위해, 우리는 DBNAME에 소요이 방법을 사용합니다. 문서에서이 연결 문자열에서 사용하는 데이터베이스 이름을 지정하지 않으면 말했다. 아래 코멘트에 @divillysausages 언급한다.
. 즉, 우리는 database.db () 컬렉션 ( 'theCollectionIwantToAccess')를 호출해야합니다; DBNAME을이 데이터베이스는 클라이언트가 더 나은 이해를 위해 실제로 URL에 의해 제공되는 경우
-
==============================
3.이 오류는 MongoDB의 라이브러리에 있습니다. MongoDB를 버전 2.2.33을 설치하려고합니다. 당신의 node_modules 디렉토리를 삭제하고 추가
이 오류는 MongoDB의 라이브러리에 있습니다. MongoDB를 버전 2.2.33을 설치하려고합니다. 당신의 node_modules 디렉토리를 삭제하고 추가
"dependencies": { "mongodb": "^2.2.33" }
그때
npm install
당신은있다
-
==============================
4.
MongoClient.connect(uristring, function (err, database) { var db=database.db('chatroomApp'); var collections=db.collection('chats'); });
필요 먼저 컬렉션에 액세스하기 전에 데이터베이스를 얻을 수 있습니다.
-
==============================
5.몽고 문서에 따르면, 우리는 아래와 같이 연결을 변경해야합니다,
몽고 문서에 따르면, 우리는 아래와 같이 연결을 변경해야합니다,
The legacy operation MongoClient.connect('mongodb://localhost:27017/test', (err, db) => { // Database returned }); is replaced with MongoClient.connect('mongodb://localhost:27017/test', (err, client) => { // Client returned var db = client.db('test'); });
몽고 버전을 다운 그레이드 할 필요가 없습니다 :)
-
==============================
6.기존 MongoDB의 패키지를 제거하고 나를 위해 문제를 해결 다음 명령을 사용하여 다시 설치. :)
기존 MongoDB의 패키지를 제거하고 나를 위해 문제를 해결 다음 명령을 사용하여 다시 설치. :)
npm uninstall mongodb --save npm install mongodb@2.2.33 --save
PS : @MihirBhende 및 @yaxartes 덕분에
참고로,
당신이 필드를 처음 사용하는 경우, https://github.com/mongodb/node-mongodb-native/releases에서 비 RC 릴리스를 선호합니다.
-
==============================
7.저도 같은 문제로 실행했습니다. 비디오가 생성 된 이후 노드의 MongoDB를 드라이버 모듈이 업데이트 된 것 같습니다. 나는 작동하는 문서에 아래의 코드를 발견했다.
저도 같은 문제로 실행했습니다. 비디오가 생성 된 이후 노드의 MongoDB를 드라이버 모듈이 업데이트 된 것 같습니다. 나는 작동하는 문서에 아래의 코드를 발견했다.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost:27017/<dbName>'; MongoClient.connect(url, (err, db) => { db.collection('<collection-name>').find({}).toArray(function(err, docs) { // Print the documents returned docs.forEach(function(doc) { console.log(doc); }); // Close the DB db.close(); }); });
로 대체
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost:27017'; // remove the db name. MongoClient.connect(url, (err, client) => { var db = client.db(dbName); db.collection('<collection-name>').find({}).toArray(function(err, docs) { // Print the documents returned docs.forEach(function(doc) { console.log(doc); }); // Close the DB client.close(); }); });
여기에 더 구문 문제로 우리가 실행하는 경우에는 최신 문서에 대한 링크입니다.
-
==============================
8.
module.exports = function(app, db) { app.post('/notes', (req, res) => { const note = { text: req.body.body, title: req.body.title }; db.collection('notes').insert(note, (err, result) => { ...
DB -> 클라이언트
module.exports = function(app, client) { var db = client.db("name"); app.post('/notes', (req, res) => { const note = { text: req.body.body, title: req.body.title }; db.collection('notes').insert(note, (err, result) => { ...
-
==============================
9.감사합니다 Dilum Darshana에 많은! 귀하의 조언이 많은 도움이되었습니다. 난 그냥, 추가 할, 당신이 이런 식으로 것입니다 외모 약속을 사용하는 경우 :
감사합니다 Dilum Darshana에 많은! 귀하의 조언이 많은 도움이되었습니다. 난 그냥, 추가 할, 당신이 이런 식으로 것입니다 외모 약속을 사용하는 경우 :
let db; MongoClient.connect('mongodb://localhost/collectionName').then(connection => { db = connection.db('collectionName'); app.listen(3000, () => { console.log("App started on port 3000"); }); }).catch(error => { console.log('ERROR:', error); });
-
==============================
10.코드 내 문제를 해결 아래 "^ 3.1.3"최근 버전 나는 "MongoDB를"을 사용했다
코드 내 문제를 해결 아래 "^ 3.1.3"최근 버전 나는 "MongoDB를"을 사용했다
server.js에서
MongoCLient.connect(db.url,(err,client)=>{ var db=client.db('notable123'); if(err){ return console.log(err); } require('./server-app/routes')(app,db); app.listen(port, ()=> { console.log("we are live on : "+ port); }) })
및 게시물 코드는 같다
module.exports = function(app,db) { app.post('/notes',(req,res)=>{ const note= {text: req.body.body,title:req.body.title}; db.collection('notes').insertOne(note,(err,result)=>{ if(err) { res.send({"error":"Ann error has occured"}); } else { res.send(result.ops[0]) } }); }); };
-
==============================
11.당신의 package.json합니다.
당신의 package.json합니다.
반드시 다음 버전은 다음과 같이합니다
"nodemon": "^1.12.1" "mongodb": "^2.2.33"
위의 nodemon 및 MongoDB를 버전은 오류없이 함께 작동합니다. 그래서 당신의 package.json는 다음과 같이 보일 것입니다 :
{ "name": "myapi", "version": "1.0.0", "description": "Json Api", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "nodemon server.js" }, "author": "Riley Manda", "license": "ISC", "dependencies": { "body-parser": "^1.18.2", "express": "^4.16.2", "mongodb": "^2.2.33" }, "devDependencies": { "nodemon": "^1.12.1" } }
망가 다운 그레이드 후 설치 NPM 실행하는 것을 잊지
-
==============================
12.뿐만 아니라이 문제를했다, 내가하는 발표자가 함수로 컬렉션을 사용 된 자습서를 다음했다. 그것은 나를 위해 일하지 않았다. 내가 발견 한 것은 발표자가 버전 MongoDB를 NPM 모듈의 2.3.4을 사용했다이었다. 모듈은 현재 버전 3.x.x에 잘. 나는 mogodb NPM 모듈의 2.x.x 버전을 요청하는 package.json 파일을 변경하면, 갑자기 모든 일했다.
뿐만 아니라이 문제를했다, 내가하는 발표자가 함수로 컬렉션을 사용 된 자습서를 다음했다. 그것은 나를 위해 일하지 않았다. 내가 발견 한 것은 발표자가 버전 MongoDB를 NPM 모듈의 2.3.4을 사용했다이었다. 모듈은 현재 버전 3.x.x에 잘. 나는 mogodb NPM 모듈의 2.x.x 버전을 요청하는 package.json 파일을 변경하면, 갑자기 모든 일했다.
내가 무슨 일이 있었 믿었하면 모듈이 다른 개체로 컬렉션을 변경하는 변경 한 것이 었습니다. 새 버전을 사용할 수 있지만, 당신이 2.x.x 버전을 지정할 경우, 기존의 방법이 작동하는 방법을 알고하지 마십시오. "^ 2.2.31"작품 : 특히 나는 "MongoDB를"(내 package.json 파일, "종속성"섹션에서 오는) 사항을 확인 할 수 있습니다.
가장 좋은 방법은:
$> npm install mongodb@2.2.31 --save
-
==============================
13.사용하여 코드를 사용 :
사용하여 코드를 사용 :
npm version 6.0.1, Node version 10.1.0 "body-parser": "^1.18.3", "express": "^4.16.3", "mongodb": "^3.1.0-beta4" "nodemon": "^1.17.4"
여기 server.js 코드는 다음과 같습니다
const express = require('express'); const MongoClient = require('mongodb').MongoClient; const bodyParser = require('body-parser'); const db = require('./config/db'); const app = express(); const port = 8000; app.use(bodyParser.urlencoded({ extended:true })) MongoClient.connect(db.url, { useNewUrlParser: true }, (err, client)=>{ var db = client.db('notable'); if (err) return console.log(err) require('./app/routes')(app, client); app.listen(port,()=>{ console.log('we are live at '+ port); }); })
다음은 설정 / db.js 코드는 다음과 같습니다
module.exports = { url:"mongodb://127.0.0.1:27017" }
여기에 경로 / note_routes.js입니다 :
var ObjectId = require('mongodb').ObjectID; module.exports= function (app, client) { var db = client.db('notable'); //find One app.get('/notes/:id', (req, res)=>{ const id =req.params.id; const details ={'_id': new ObjectId(id)} db.collection('notes').findOne(details, (err, item)=>{ if(err) { res.send({'error':"An error has occured"}) } else { res.send(item) } }); }); //update rout app.put('/notes/:id', (req, res)=>{ const id =req.params.id; const details ={'_id': new ObjectId(id)} const note ={text: req.body.body, title: req.body.title}; db.collection('notes').update(details, note, (err, item)=>{ if(err) { res.send({'error':"An error has occured"}) } else { res.send(item) } }); }); //delete route app.delete('/notes/:id', (req, res)=>{ const id =req.params.id; const details ={'_id': new ObjectId(id)} db.collection('notes').remove(details, (err, item)=>{ if(err) { res.send({'error':"An error has occured"}) } else { res.send("Note "+id+"deleted!") } }); }); //insert route app.post('/notes', (req, res)=>{ const note ={text: req.body.body, title: req.body.title}; db.collection('notes').insert(note, (err, results)=>{ if(err) { res.send({'error':"An error has occured"}) } else { res.send(results.ops[0]) } }); }); };
-
==============================
14.연결 URL에 데이터베이스 이름을 사용하지 마십시오 :
연결 URL에 데이터베이스 이름을 사용하지 마십시오 :
const mongo_url = 'mongodb://localhost:27017'
대신 방법 아래 사용
MongoClient.connect(mongo_url , { useNewUrlParser: true }, (err, client) => { if (err) return console.log(err) const db = client.db('student') const collection = db.collection('test_student'); console.log(req.body); collection.insertOne(req.body,(err,result)=>{ if(err){ res.json(err); } res.json(result); }); });
-
==============================
15.
const MongoClient = require('mongodb').MongoClient; //connection url const url = 'mongodb://localhost:27017/myproject'; MongoClient.connect(url,{useNewUrlParser: true},(err,client)=> { if(err) { return console.dir(err) } console.log('Connected to MongoDB') //get the collection let db = client.db('myproject'); db.collection('users').insertOne({ name: 'Hello World', email: 'helloworld@test.com' },(err,result)=> { if(err) { return console.dir(err) } console.log("Inserted Document"); console.log(result); }); });
-
==============================
16.나는 간단한 해결책을했습니다 :
나는 간단한 해결책을했습니다 :
note_routes.js
db.collection('notes').insert(note, (err, result) => {
바꾸다
db.db().collection('notes').insert(note, (err, result) => {
from https://stackoverflow.com/questions/43779323/typeerror-db-collection-is-not-a-function by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 몽구스 findByIdAndUpdate 올바른 모델을 반환하지 (0) | 2019.12.05 |
---|---|
[MONGODB] .save () 및 업데이트를 사용 몽구스 간의 차이 () (0) | 2019.12.05 |
[MONGODB] 방법 찾기 방법에서 몽구스 결과를 반환? (0) | 2019.12.05 |
[MONGODB] 몽구스 / MongoDB를에 Multifield 인덱스 만들기 (0) | 2019.12.05 |
[MONGODB] MongoDB의 배열에 배열 쿼리 (0) | 2019.12.05 |