01/10/2018, 11:22
Góp ý về node js models views controller
Em là new bie về node js em có viết một đoạn về mvc trong node js, bản thân nhận thấy có một số lũng cũng mong các cao nhân optimize giúp.
Code như sau
Phần model
var express = require('express')
, router = express.Router()
router.post('/:cmd', function (req, res) {
var cmd=req.params.cmd;
var sqlite3 = require('sqlite3').verbose();
var repository = "testDB.db";
var db = new sqlite3.Database(repository);
var tbl="hs";
switch (cmd) {
case 'max_id':
var sql="select * from "+tbl;
db.all(sql,function(err,rows){
if(err) throw err;
var max=-1;
for(var x in rows){
if( rows[x].id > max ){
max=rows[x].id;
}
}
res.json({max:max});
});
break;
case 'lds':
var sql="SELECT * from "+tbl;
db.all(sql,function(err,rows){
if(err) throw err;
res.json({ds:rows});
})
break;
case 'del':
var r=req.body;
var sql=[
'delete from '+tbl,
' where id=? ',
].join(');
var data=[r.id];
db.run(sql,data,function(err){
if(err){
throw err;
}
res.json({msg:'delok'})
})
break;
case "add":
var r=req.body;
var data=[r.id,r.name,r.tuoi,r.dia_chi,r.luong];
var sql=[
'insert into '+tbl,
' values (?,?,?,?,?) ',
].join(');
db.run(sql,data,function(err){
if(err){
throw err;
}
res.json({msg:'addok'});
})
break;
}//end switch
})
module.exports = router
Phần view
<% layout('layout1') -%>
<h3>this is vdmodel index</h3>
<script>
var url = "<%=base_url+'/api/hs'%>";
var app = angular.module('myApp', []);
app.controller('myCtrl', function ($scope,$http) {
$scope.msg = "hello world";
$scope.lds = function () {
var promise = $http({
url: url + "/lds",
method: "POST",
headers: { 'Content-Type': 'application/json' },
});
return promise;
};
$scope.del = function (id) {
var promise = $http({
url: url + "/del",
method: "POST",
headers: { 'Content-Type': 'application/json' },
data: {id:id},
});
return promise;
};
$scope.add = function (r) {
var promise = $http({
url: url + "/add",
method: "POST",
headers: { 'Content-Type': 'application/json' },
data:r,
});
return promise;
};
$scope.max_id = function () {
var promise = $http({
url: url + "/max_id",
method: "POST",
headers: { 'Content-Type': 'application/json' },
});
return promise;
};
$scope.lds().then(function(res){
$scope.ds=res.data.ds;
})
$scope.on_del=function(e){
var id=e.target.id;
$scope.del(id).then(function(res){
var msg=res.data.msg;
if(msg=='delok'){
$scope.lds().then(function (res) {
$scope.ds = res.data.ds;
})
}
})
}
$scope.on_add=function(){
$scope.max_id().then(function(res){
var max=res.data.max;
$scope.msg=max;
var hs={
id:max+1,
name:'thuc71',
tuoi:11,
dia_chi:'htp',
luong:1.11,
}
$scope.add(hs).then(function(res){
var msg=res.data.msg;
if (msg == "addok") {
$scope.lds().then(function (res) {
$scope.ds = res.data.ds;
})
}
})
})
}
});
</script>
<div ng-app="myApp" ng-controller="myCtrl">
{{msg}}<br>
<ul>
<li ng-repeat="x in ds">
{{x}}
<button id="{{x.id}}" ng-click="on_del($event);">del</button>
</li>
</ul>
<button ng-click="on_add();">add</button>
</div>
kết quả
first screen
add screen
del screen
thank
Bài liên quan
Mình đang học nodejs, coi như newbie.
Thấy code bạn dùng sqlite hay quá, tại mình tưởng chỉ dùng mongodb đc thôi. File sql này lưu luôn trên server đc đúng k bạn? Bạn đã dùng mongodb chưa? Dùng rồi thì cách nào ổn bạn?
mongodb thì cũng như mysql bạn à, vậy thì xài luôn cái mysql luôn đi, dù sao có một độ dài lịch sử thì mysql tốt hơn.
Còn cái sqlite này thì file db lưu trên server luôn, dễ quản lý.
Mình thấy cái sqlite này cũng hay, giống cái web mà xài dữ liệu ms access ấy !!!
Mở rộng project thì mới cần sửa code, còn demo thì như vậy được rồi.
Việc dùng mongo, mysql hay sqlite tùy thuộc vào yêu cầu project, mỗi cái sẽ có lợi hại khác nhau.
Còn không yêu cầu gì thì cứ xài cái nào thấy thích, đổi qua db khác cũng ko phải là việc gì quá to tát đối với những project như thế này.
Góp ý: bạn nên làm 1 project từ đầu đến cuối, từ đó sẽ học hỏi nhiều hơn là đi tối ưu 1 đoạn code như trên.
Ví dụ nhé, bạn đang cần 100k file pdf ebook trên máy tính thuộc nhiều danh mục khác nhau, muốn public online cho mọi người cùng xem, có thể tải về. Bạn sẽ làm thế nào để đảm bảo được yêu cầu này.
100k file đó lưu ở đâu, chia chuyên mục ntn, lưu = db gì, đọc online ntn, download ntn, quản trị ntn, có cho user upload thêm không, có gì quản lý thành viên ntn… rồi tới frontend sử dụng ntn, có cần dạng SAP như angular hay react ko… Mỗi bước bạn làm sẽ hình thành nên kinh nghiệm của bạn.
Theo thiển ý của em thì nên tổ chức ở mức tế bào cho tốt rồi mới tiếp tục cái dự án của anh. Ví dụ trong de mo của em thì có nên sửa cái gì cho hợp lý để thỏa mãn các mục tiêu.
Bổ sung cho gen code:
lấy danh sách các column trong table
Một dự án trung bình cũng cỡ chục cái table, nếu không tổ chức được cấp cell thì than ôi.
Vài lời mong các pro giúp đỡ, tối thiểu cũng là cho vài cái key word,
ps: cái demo của em cố gắng theo style của api restfull nhưng chắc là còn thiếu sót.
Ý bạn là ORM phải không, nếu là orm thì có thể xài
sequelize
, 1 thư việc khá ngon lành để lưu db cỡ nhỏ, kết nối nhiều loại db, có define sẵn 1 mớ function findOne, findAll, findById, findByName, delete, update… đáp ứng được nhu cầu cơ bản.Nếu bạn thích optimize những cái nhỏ thì mình góp ý cho:
Cám ơn nhé, sequelize, cái này có vẻ phức tạp đây, một thư viện đồ sộ thế, full document, mà viết ra để thiên hạ xài chơi, bái phục. Thôi gen code cho lành…
node js thuộc dạng bất đồng bộ, có thể là thế mạnh của nó.
lấy field sqlite cái này hay hơn
and result
sqlite good job
happy, share for every one