[MONGODB] 가장 좋은 방법은 Node.js를를 사용하여 MongoDB에 연결하려면 [중복]
MONGODB가장 좋은 방법은 Node.js를를 사용하여 MongoDB에 연결하려면 [중복]
나는 노드와 몽고를 사용하는 방법에 대한 몇 가지 가이드를 읽어했습니다, 그들은 모두 다른 데이터베이스에 연결하는 것. 나를 위해 잘 작동 하나의 특정 방법이었다 :
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
if(err) { return console.dir(err); }
db.createCollection('users', function(err, collection) {});
//Do all server/database operations in here
});
그러나,이 비효율적 / 나에게 이상한 것 같다, 나는 새 사용자를 만들거나 정보를 검색처럼) 데이터베이스에 app.get가 (이 때마다 다시 연결해야합니다.
더 나에게 맞는 것 같다 또 다른 방법은
var mongoose = require("mongoose")
var db = mongoose.connect("localhost:27107/users");
db.createCollection('users', function(err, collection) {});
나는 몇몇 사이트는이 라인을 따라 뭔가를 본 적이 있지만 나는 개인적으로 일에 위의를 얻을 수 없습니다. 나는 오류 형식 오류가 계속 : db.createCollection는 함수 서버 측 아닙니다. 위의 코드가없는 작업을 수행하는 이유 첫 번째 코드는 좋은 대안이며, 경우에 따라서, 내 질문이며,이 작업을 수행하는 다른 방법이있는 경우.
해결법
-
==============================
1.당신은 예를 들어, (예를 들어 DB) 연결을 유지하기 위해 전역 변수를 사용할 수 있습니다 :
당신은 예를 들어, (예를 들어 DB) 연결을 유지하기 위해 전역 변수를 사용할 수 있습니다 :
var db = null // global variable to hold the connection MongoClient.connect('mongodb://localhost:27017/', function(err, client) { if(err) { console.error(err) } db = client.db('test') // once connected, assign the connection to the global variable }) app.get('/', function(req, res) { db.collection('test').find({}).toArray(function(err, docs) { if(err) { console.error(err) } res.send(JSON.stringify(docs)) }) })
당신이 원하는 경우 또는, 당신은 또한이 콜백 인수없이 호출하면 MongoClient에 의해 반환되는 약속 개체를 사용할 수 있습니다 :
var conn = MongoClient.connect('mongodb://localhost:27017/') // returns a Promise app.get('/', function(req, res) { conn.then(client=> client.db('test').collection('test').find({}).toArray(function(err, docs) { if(err) { console.error(err) } res.send(JSON.stringify(docs)) })) })
내가 두 번째 예에서 ES6 지방 화살표 함수 정의를 사용하는 것을 참고하시기 바랍니다.
당신은 당신이 MongoClient 때마다 호출해서는 안 절대적으로 정확합니다. 두 개 이상의 좋은 일들을 달성하는 연결 풀을 만들기 위해 MongoDB를 Node.js를 드라이버를 전역 변수 또는 약속을 허용 사용 :
편집 2018년 8월 24일 : Node.js를 드라이버 버전 3.0 및 새로운 반환 클라이언트 객체 대신 데이터베이스 개체의 MongoClient.connect () 메소드. 위 예제는 최신 Node.js를 드라이버 버전을 최신으로 유지하기 위해 수정되었습니다.
-
==============================
2.당신은이 방법을 사용할 수 있습니다 :
당신은이 방법을 사용할 수 있습니다 :
의 server.js 파일이 :
import path from 'path' import express from 'express' import bodyParser from 'body-parser' import morgan from 'morgan' import db from './server/database' import routes from './server/routes' import webpack from 'webpack' import webpackDevMiddleware from 'webpack-dev-middleware' import webpackHotMiddleware from 'webpack-hot-middleware' import webpackConfig from './config/webpack' const app = express() const port = process.env.PORT || process.env.NODE_PORT const compiler = webpack(webpackConfig) db(λ => { app.use(webpackDevMiddleware(compiler, { noInfo: true, publicPath: webpackConfig.output.publicPath })) app.use(webpackHotMiddleware(compiler)) app.use(morgan('dev')) app.use(bodyParser.json({ limit: '20mb' })) app.use(bodyParser.urlencoded({ limit: '20mb', extended: false })) app.use('/static', express.static('static')); //app.use('/api', jwt) app.use('/api', routes()) app.set('json spaces', 2) app.get('*', function(request, response) { response.sendFile(path.resolve(__dirname, 'index.html')) }) app.listen(port, (error) => { if (error) { console.error(error) throw error } else { console.info(`==> 🌎 Listening on port ${port}. Open up http://localhost:${port}/ in your browser.`) } }) })
서버 / database.js
import mongoose from 'mongoose' export default callback => { const { MONGO_URL, MONGO_PORT, MONGO_DB } = process.env mongoose.connect(`mongodb://${MONGO_URL}:${MONGO_PORT}/${MONGO_DB}`, error => { if (error) { console.error('Please make sure your MongoDB configuration is correct and that service is running') throw error } }) callback() }
그럼 당신은 예를 들어, 몽구스 모델을 정의해야합니다 :
import mongoose, { Schema } from 'mongoose' const ideaSchema = new Schema({ title: { type: String, required: true }, slug: { type: String, required: true, unique: true }, description: { type: String, required: true } }) export default mongoose.model('Idea', ideaSchema)
그리고 단지 컨트롤러이 방법을 사용합니다 :
import HttpStatus from 'http-status-codes' import mongoose from 'mongoose' import sanitize from 'sanitize-html' import slug from 'slug' import Idea from '../models/idea' const findAllIdeas = (req, res) => { Idea.find() .select('user title slug createdAt updatedAt') .populate({ path: 'user', select: 'firstName lastName' }) .then(data => res.status(HttpStatus.OK).json(data)) .catch(error => res.status(HttpStatus.BAD_REQUEST).json(error)) } export default { findAllIdeas, findIdeaBySlug, createIdea, addComment }
각 GET 요청에 대해 MongoDB를 연결할 필요가 없습니다.
그래서 경로는 같이 표시됩니다. 아주 간단합니다 :
import { Router } from 'express' import controller from '../controllers/idea' const router = Router() router.route('/') .get(controller.findAllIdeas) .post(controller.createIdea) router.route('/:slug') .get(controller.findIdeaBySlug) router.route('/comment') .post(controller.addComment) export default router
-
==============================
3.나는 표현의 MongoDB의 연결을 다시 사용하는 방법에 대한 자습서를 작성했습니다. 당신은 여기에서 볼 수 있습니다. 기본적으로, 당신이 그런 expressjs와 함께 사용할 수있는 간단한 모듈입니다 :
나는 표현의 MongoDB의 연결을 다시 사용하는 방법에 대한 자습서를 작성했습니다. 당신은 여기에서 볼 수 있습니다. 기본적으로, 당신이 그런 expressjs와 함께 사용할 수있는 간단한 모듈입니다 :
var connection = require('./dbconnection'); // url and optional config. app.use(connection(app, 'mongourl', {});
그리고 여기에 연결을위한 코드는 다음과 같습니다
module.exports = function(app, uri, opts) { if (typeof uri !== 'string') { throw new TypeError('Error: Unexpected mongodb connection url'); } opts = opts || {}; var property = opts.property || 'db'; var connection; return function expressMongoDb(req, res, next) { if (!connection) { connection = MongoClient.connect(uri, opts); } connection .then(function (db) { req[property] = db; app.set('mongodb', db); next(); }) .catch(function (err) { connection = undefined; next(err); }); }; };
-
==============================
4.다음과 같이 내 이동 -에 코드입니다 :
다음과 같이 내 이동 -에 코드입니다 :
mongoose.connect(YOUR_URL ,function(err) { if (err) { console.log(err); }else{ console.log("Connected to DB"); } });
문제가 될 수, 27107 : 또한 단지 로컬 호스트에 연결을 시도.
from https://stackoverflow.com/questions/38485575/best-way-to-connect-to-mongodb-using-node-js by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의에서 저장된 함수를 호출 (0) | 2019.12.25 |
---|---|
[MONGODB] 어떻게 맵리 듀스로 MongoDB를 중복 레코드를 제거하려면? (0) | 2019.12.25 |
[MONGODB] 어떻게 유성은 MongoDB를 즉시 변경 알 수 있을까? (0) | 2019.12.25 |
[MONGODB] 배열에 배열에서 항목을 업데이트 (0) | 2019.12.24 |
[MONGODB] 객체의 배열에 몽구스 / MongoDB를 $ addToSet 기능을 사용하여 (0) | 2019.12.24 |