KẾT NỐI VÀ LÀM VIỆC MONGODB VỚI EXPRESS VÀ NODEJS.

Mỗi ứng dụng web đều cần phải có nơi lưu trữ dữ liệu của nó không ngoại trừ đó là ứng dũng của node hay express. Một trong những cơ sở dữ liệu không quan hệ (NoSQL) thong dụng là mongoDB.
 Sau khi bạn có 1 database mongodb đang chạy, bạn phải cài đặt driver cho mongodb để kết nối đến mongodb. Nó là được đóng gói NPM cho nodejs và express.
      $npm install mongodb
KẾT  NỐI:
ví dụ: index.js
var MongoClient = require('mongodb').MongoClient
var URL = 'mongodb://localhost:27017/mydatabase'
MongoClient.connect(URL, function(err, db) {
  if (err) return
  var collection = db.collection('foods')
  collection.insert({name: 'taco', tasty: true}, function(err, result) {
    collection.find({name: 'taco'}).toArray(function(err, docs) {
      console.log(docs[0])
      db.close()
    })
  })
})

Trên là một ví dụ đơn giản, nó kết nối đến database và ghi vài dữ liệu vào database :
({name: 'taco', tasty: true}) trong collection foods Sau đó, chúng đọc và hiển thị dữ liệu đó.
Để chạy file mã trên : node index.js
Bạn sẽ thấy kết quả hiện thị:
{ "_id": 551e56b41143e39e7ff6b272, "name": "taco", "tasty": true }
Nếu bạn chạy file này nhiều lần thì nó sẽ hiển thị nhưng khác phần _id
SỬ DỤNG LẠI KẾT  NỐI:
Ví dụ kiến trúc của ứng dụng của bạn như sau:
app/
   controllers/
      comments.js
      users.js
   models/
   views/
   app.js
với ví dụ trên bạn cần cài đặt 2 gói NPM:
$npm install express jade
Express sẽ phục vụ ứng dụng web của bạn và jade sẽ render ra template của nó.
Bạn tạo một file db.js ngang hang với file app.js
var MongoClient = require('mongodb').MongoClient
var state = {
  db: null,
}
exports.connect = function(url, done) {
  if (state.db) return done()
  MongoClient.connect(url, function(err, db) {
    if (err) return done(err)
    state.db = db
    done()
  })
}
exports.get = function() {
  return state.db
}
exports.close = function(done) {
  if (state.db) {
    state.db.close(function(err, result) {
      state.db = null
      state.mode = null
      done(err)
    })
  }
}
File ví dụ này giúp chúng ta kết nối đến database khi ứng dụng được khởi động. và sau đó bất kì một controller nào có thể chỉ sử dụng đối tượng db và return bởi phương thức GET.
File app.js như sau:

var express = require('express')
  , app = express()
var db = require('./db')
app.engine('jade', require('jade').__express)
app.set('view engine', 'jade')
app.use('/comments', require('./controllers/comments'))
app.use('/users', require('./controllers/users'))
// Connect to Mongo on start
db.connect('mongodb://localhost:27017/mydatabase', function(err) {
  if (err) {
    console.log('Unable to connect to Mongo.')
    process.exit(1)
  } else {
    app.listen(3000, function() {
      console.log('Listening on port 3000...')
    })
  }
})
Bạn có thể cho hiện thị 1 số comment như file comments.js sau:

var express = require('express')
  , router = express.Router()
var db = require('../db')
router.get('/all', function(req, res) {
  var collection = db.get().collection('comments')
  collection.find().toArray(function(err, docs) {
    res.render('comments', {comments: docs})
  })
})
router.get('/recent', function(req, res) {
  var collection = db.get().collection('comments')
  collection.find().sort({'date': -1}).limit(100).toArray(function(err, docs) {
    res.render('comments', {comments: docs})
  })
})
module.exports = router
file trên chia thành 2 phần: phần một hiển thị tất cả các comment, phần 2 hiển thị 100 comment gần đây nhất.



Nhận xét

Bài đăng phổ biến từ blog này

Cách sử dụng sys.argv trong python.

Trang web medium.com chết, vì sao ?

Thiết kế một RESTful API bằng python và flask.