Trong bài có sử dụng
Yêu cầu
Giao diện
Cấu trúc thư mục
package.json
Bạn tạo 1 file package.json có nội dung như sau:
File này bao gồm các thông tin về tên ứng dụng, tác giả, các module cần thiết để chạy được ứng dụng.{
"name": "TodoAplication",
"description": "Todo Aplication",
"author": "Cong Luong <cong.itsoft@gmail.com>",
"private": true,
"dependencies": {
"express": "3.4.7",
"mongoose": "3.8.1",
"mustache": "0.8.0"
}
}
Khi cài đặt bạn bật cửa sổ command line lên chạy dòng lệnh sau: npm install như vậy tất cả các module cần thiết sẽ được download về thư mục application của bạn ở ví dụ này là todo
Backend
Tạo 1 file server.js. Đầu tiên chúng ta sẽ phải require các module cần thiết
Cấu hình ứng dụngvar express = require('express');
var app = express();
var server = require('http').createServer(app);
var mustache = require('mustache');
var mongoose = require('mongoose');
Kết nối MongoDB thông qua module // Configure
app.configure(function() {
app.use(express.bodyParser());
// Cấu hình Cookie
app.use(express.cookieParser('5349ghakg@#$%#$'));
// Cấu hình đường dẫn static
app.use('/js' , express.static(__dirname + '/public/js'));
app.use('/css' , express.static(__dirname + '/public/css'));
app.use('/images', express.static(__dirname + '/public/images'));
app.set('layouts', __dirname + '/layouts');
});mongoose
Tạo // Connect mongo
mongoose.connect('mongodb://localhost/todos');schema , trong mongoose thì mỗi collection trong MongoDB tương ứng với 1 model và cấu trúc của collection tương ứng với
1 schema.
Lắng nghe và xử lý các // Schema Mongoose
var Schema = mongoose.Schema;
var todoSchema = new Schema({
name : String
});
var todoCollection = mongoose.model('todos', todoSchema);request từ client
Chạy ứng dụng - lắng nghe ở port 8899app.get('/', function(req, res) {
res.sendfile(app.get('layouts') + '/index.html');
});
// Danh sách các todo
app.get('/api/listJob', function(req, res) {
// Lấy ra tất cả các item, trả về json
todoCollection.find({}, function(err, data) {
res.json(data);
});
});
// Thêm mới 1 todo
app.post('/api/job', function(req, res) {
var dataReturn = {
code : 0,
message : null
};
var todo = new todoCollection({ name : req.body.name, });
todo.save(function(err) {
if(!err) {
dataReturn.code = 1;
dataReturn.message = 'Add Success';
dataReturn.data = todo;
}
res.json(dataReturn);
});
});
// Xóa 1 todo
app.delete('/api/job/:id', function(req, res) {
var dataReturn = {
code : 0,
message : 'Remove Success'
};
todoCollection.remove({_id : req.params.id}, function(err) {
if(!err) {
dataReturn.code = 1;
res.json(dataReturn);
}
});
});
server.listen(8899);
Frontend
Html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Todo Application</title>
<link rel="stylesheet" href="/css/bootstrap.min.css">
<link rel="stylesheet" href="/css/style.css">
<script src="//code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
<script src="/js/underscore-min.js"></script>
<script src="/js/mustache.js"></script>
<script src="/js/backbone-min.js"></script>
<script src="/js/main.js"></script>
<script id="template-item-job" type="text/template">
<div>{{ name }}<span class="remove-job close pull-right">×</span></div>
</script>
</head>
<body>
<div id="wrapper">
<div id="form-todo" class="form">
<div class="form-group">
<input id="job-name" class="form-control" type="text" name="job_name" placeholder="Việc cần làm">
</div>
<div class="form-group">
<ul id="job-list" class="form-control list-unstyled" name="job_list"></ul>
</div>
</div>
</div>
</body>
</html>
Css
body {
background-image: url('/images/01.jpg');
}
#form-todo {
width: 500px;
margin: 50px auto;
}
#form-todo input[type="text"],
#form-todo textarea {
border-radius: 0;
border: none;
box-shadow: none;
}
#job-list {
min-height: 200px;
height: initial;
/*overflow: auto;*/
}
#job-list li {
border: 1px solid #8B8B8B;
margin: 5px 0;
padding: 5px;
border-radius: 3px;
background: rgba(70, 172, 23, 0.5);
color: rgb(3, 3, 3);
box-shadow: 1px 2px 5px rgba(46, 104, 19, 0.5);
}
Javascript
Tạo file main.js.
Khởi tạo todoModel:
Khởi tạo todoCollection:var todoModel = Backbone.Model.extend({
defaults : {
id : null,
name : null
},
urlRoot : '/api/job' // Đường dẫn api
});
Khởi tạo todoView ( Quản lý view của từng model )var todoCollection = Backbone.Collection.extend({
model : todoModel,
url : '/api/listJob' // Đường dẫn api
});
Trong var todoView = Backbone.View.extend({
template : $('#template-item-job').html(),
tagName : 'li',
events : {
'click .remove-job' : 'removeJob'
},
initialize : function() {
this.render();
},
// Render template
render : function() {
var __this = this;
var html = Mustache.to_html(this.template,this.model);
$('#job-list').append(__this.$el.html(html));
},
// Xóa todo
removeJob : function() {
var __this = this;
console.log(__this.model);
// Xóa model
var todo = new todoModel({
id : __this.model._id
});
todo.destroy({
success : function() {
// Xóa item
__this.$el.remove();
}
});
}
});todoView chúng ta có 1 event khi click vào .remove-job sẽ gọi hàm removeJob để xóa 1 todo,
2 hàm render và removeJob.
Hàm render có nhiệm vụ hiển thị ra thông tin của một todo
Hàm render : function() {
var __this = this;
// Đổ dữ liêu vào template và return ra html
var html = Mustache.to_html(this.template,this.model);
// Thêm vào danh sách các todo
$('#job-list').append(__this.$el.html(html));
}removeJob có nhiệm vụ xóa thông tin một todo
Khởi tạo var todo = new todoModel({
id : __this.model._id
});
todo.destroy({
success : function() {
// Xóa item
__this.$el.remove();
}
});todoModel truyền vào id để Backbone biết bạn đang làm việc với model nào. Gọi hàm destroy để xóa model, lúc này Backbone
sẽ gửi 1 request theo phương thức DELETE dạng /api/id. Bên server sẽ lắng nghe request này và xóa bản ghi ứng với id client gửi lên.
Khởi tạo todoListView ( Quản lý view của collection )// Xóa 1 todo
app.delete('/api/job/:id', function(req, res) {
var dataReturn = {
code : 0,
message : 'Remove Success'
};
todoCollection.remove({_id : req.params.id}, function(err) {
if(!err) {
dataReturn.code = 1;
res.json(dataReturn);
}
});
});
Trong var totoListView = Backbone.View.extend({
el : $('#form-todo'),
events : {
'keyup #job-name' : 'addJob'
},
initialize : function() {
var __this = this;
__this.render();
},
render : function() {
var __this = this;
_.each(this.collection.models, function(model) {
__this.renderItemJob(model.toJSON());
});
},
renderItemJob : function(job) {
new todoView({
model : job
});
},
addJob : function(e) {
e.preventDefault();
var __this = this;
var keyBoard = e.keyCode || e.which;
// Nếu nhấn phím enter
if(keyBoard === 13) {
var data = {
name : $('#job-name').val()
};
var todo = new todoModel();
todo.save(data, {
success : function(response) {
var model = response.toJSON().data;
__this.renderItemJob(model);
$('#job-name').val('');
}
});
__this.collection.add(data);
}
}
});todoListView chúng ta sẽ quản lý event thêm 1 todo khi người dùng nhấn phím enter, tạo ra giao diện danh sách các todo khi tải trang.
Tới đoạn này các các bạn không hiểu là // Khởi tạo 1 view ứng với model truyền vào
renderItemJob : function(job) {
new todoView({
model : job
});
},
// Tạo danh sách các todo dựa theo collection lấy được từ api
render : function() {
var __this = this;
// Lặp qua các model và render ra view
_.each(this.collection.models, function(model) {
__this.renderItemJob(model.toJSON());
});
},this.collection ở đâu vậy. Ở cuối file main.js có đoạn code sau:
Ở đây tôi tạo 1 thể hiện của var app = new todoCollection();
app.fetch({
success : function(res) {
new totoListView({
collection : res
});
}
});todoCollection và dùng hàm fetch tạo 1 request với method GET có dạng api/listJob để lấy danh sách
các todo được trả về từ server
Hàm addJob
Khởi tạo 1 thể hiện của e.preventDefault();
var __this = this;
var keyBoard = e.keyCode || e.which;
// Nếu nhấn phím enter
if(keyBoard === 13) {
var data = {
name : $('#job-name').val()
};
var todo = new todoModel();
todo.save(data, {
success : function(response) {
var model = response.toJSON().data;
__this.renderItemJob(model);
$('#job-name').val('');
}
});
__this.collection.add(data);todoModel dùng hàm save không truyền vào id model sẽ tạo 1 request với method POST dạng /api/job tham số
gửi đi là name. Phía server lắng nghe request và thêm mới 1 todo
Sau khi app.post('/api/job', function(req, res) {
var dataReturn = {
code : 0,
message : null
};
var todo = new todoCollection({ name : req.body.name, });
todo.save(function(err) {
if(!err) {
dataReturn.code = 1;
dataReturn.message = 'Add Success';
dataReturn.data = todo;
}
res.json(dataReturn);
});
});server thêm mới thành công và trả về dữ liệu thì gọi hàm renderItemJob để append todo mới vào danh sách hiện có.
Tải danh sách các todo khi trang được load
var app = new todoCollection();
app.fetch({
success : function(res) {
new totoListView({
collection : res
});
}
});
Chạy ứng dụng
Bạn cd vào thư mục todo chạy 2 câu lệnh sau
npm install -> Để cài đặt các module cần thiếtnode server.js -> Chạy ứng dụng
Source Code - Download
Tổng kết
Home
»
Công nghệ mới
»
Công nghệ số
»
Download
»
Lập trình PHP
»
Ứng dụng todo với Backbonejs,Nodejs,Expressjs,Mongoose
Topics: Công nghệ mới Công nghệ số Download Lập trình PHP
About Học viện đào tạo trực tuyến
Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email:
dinhanhtuan68@gmail.com
.
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
Bài đăng nổi bật
Khóa Đào Tạo Hacker Mũ Trắng
Nhấn vào đây để bắt đầu khóa học Giúp học viên tìm hiểu cơ bản bản chuyên sâu kỹ năng hack website, sever, email, sms, facebook... Khóa...
Khóa học trực tuyến
Truy cập nhiều nhất
-
Nếu bạn đã từng làm việc trong một dự án ASP.NET MVC thì chắc chẳng còn xa lạ gì với khái niệm Action result mà ASP.NET MVC đã và đang cung...
-
Apple vừa tung hai đoạn video ngắn để quảng cáo cho độ bền và 3 camera trên iPhone 11 Pro . Bạn sẽ thấy là iPhone 11 Pro bị ném nh...
-
Mục lục bài viết Termux là gì? Cách cài đặt Có thể dùng Termux để Hack không? Cách cài đặt các công cụ hack trên Termux Cài NMAP – Công cụ ...
-
Anki là một phần mềm được thiết kế để giúp bạn ghi nhớ các sự kiện, từ ngữ (chẳng hạn như từ ngữ trong một ngôn ngữ nước ngoài) một cách ...
-
Bizagi Modeler được thiết kế để diễn đạt hệ thống ký hiệu mô hình hóa tiến trình nghiệp vụ BPMN theo cấu trúc dự án, tiến tới mục tiêu tăng ...
-
Diễn viên JAV Shigeo Tokuda cho rằng tuổi tác không hoàn toàn là vấn đề, xứng đáng danh hiệu "Made in Japan- gần 90 năm vẫn chạy tốt...
-
Câu hỏi và đáp án Câu 1. Địa chỉ IP có độ dài bao nhiêu bit và được phân thành bao nhiêu lớp? a. 32 bit, 4 lớp (A, B,C,D) ...
-
Trước đây, khi nói tới cơ sở dữ liệu ví dụ của Microsoft chúng ta sẽ nghĩ ngay tới CSDL Northwind , tuy nhiên từ khi giới thiệu SQL Server...
-
Trong Doctrine bạn có thể lấy một kết quả phức tạp từ RDBMS và chuyển chúng vào một mảng hay object mô tả cấu trúc quan hệ của bạn. Điều nà...
-
V3, V3i là những cái tên làm nên tên tuổi của Motorola cách đây 10 năm. Là hai sản phẩm giúp hãng có khả năng đứng vững bên cạnh cái tên ...
Tin công nghệ
Download
Danh mục bài viết
- 3ds Max
- access
- Adobe Illustrator
- AI
- android
- Articulate Storyline
- autoit
- Bài thuốc
- Cây xanh
- Cây xanh trong nhà
- CI Framework
- Clip ca nhạc
- Công nghệ Mobile
- Công nghệ mới
- Công nghệ số
- css
- DotnetNuke
- Download
- Đào tạo CorelDraw chuyên nghiệp
- Đào tạo photoshop chuyên nghiệp
- Định hướng lập trình
- Đọc sách
- excel
- Foxpro
- Giải pháp excel chuyên nghiệp
- Giải trí
- Giáo dục
- Giới thiệu Phần mềm
- Google Apps Script
- Google Docs
- Google drive
- Google Sheets
- Google Slide
- HAcker
- Hàng khuyến mại
- hay
- Hệ thống Elearning Moodle
- Học tiếng anh
- Học từ Youtobe
- html
- Hướng dẫn xây dựng và quản lý JOOMLA
- Imacro
- ios apple
- Iphone
- Khoa học dữ liệu
- Khóa học hay
- Khóa học trực tuyến
- Kiểm thử phần mềm
- Kiến thức cơ bản
- Kiến thức cuộc sống
- Kinh doanh
- Kỹ năng
- lập trình
- Lập trình .NET
- Lập trình AngularJS
- Lập trình assembly
- Lập trình di động
- Lập trình Java
- Lập trình Javascript
- Lập trình Nodejs
- Lập trình PHP
- Machine Learning
- Microsoft Teams
- MP3
- Nấu ăn
- Nét xinh
- Ôn luyện thi chứng chỉ MOS
- phần cứng
- Phần mềm cho Bé và Cha mẹ
- PHP tool
- powerpoint
- Python
- Quản trị cơ sở dữ liệu SQL
- Quản trị dự án-công việc hiệu quả
- Quản Trị Mạng
- Sách nói
- Sách nổi tiếng - Best Seller
- Sáng tạo
- SEO-Tối ưu công cụ tìm kiếm
- skype
- SPSS
- Suy ngẫm hay
- Sức khỏe
- Symfony Framework
- tết
- Thiết kế đồ họa
- Tin hay
- Tin học Văn phòng
- Toeic 500-700
- Tranh treo
- Unity 3D
- vba
- visio
- web
- word
- wordpress
- Xây dựng bài giảng điện tử
- zalo
Nhóm Zalo CÔNG NGHỆ
Hiện nay có rất nhiều công việc mà bất cứ ai cũng có thể làm tốt khi không yêu cầu quá nhiều kiến thức chuyên môn, như: Bán hàng chẳng hạn. Ngồi một chỗ, với điện thoại và laptop là bạn có thể bán hàng 63 tỉnh thành, thậm chí toàn thế giới. Còn nếu bạn chưa biết bán hàng sao cho hiệu quả thì vào nhóm: HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN.
