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
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
Đăng nhận xét