Node.js는 무엇을 할 수 있습니까? 나는 여전히 그가 사용하는 측면이 상당히 널리 알고 있으며, 그러한 프로젝트와 접촉 할 기회가 없습니다. 내가 좋아했기 때문에 여가 시간에 웹 사이트와 백엔드를 만들었습니다. 나는 당신이 기술을 좋아한다면 기술을 가지고 놀 수있는 진실을 깊이 이해해 왔지만, 프로젝트에서 그것을 사용하면 많은 문제를 해결하는 데 시간을 보내야합니다.
사용 된 기술 :
Express + Jade
sqlite + 속도
레 디스
1. 제이드에 대해
지원이 포함됩니다. 예를 들면 다음과 같습니다. 포함 ./includes/header 헤더는 ASP.NET 사용자 컨트롤과 유사한 부분보기입니다.
지원 확장. 예를 들어 : extends ../layout은 마스터 페이지 레이아웃을 사용합니다.
for 루프는 매우 간단합니다.
코드 사본은 다음과 같습니다.
userList의 각 항목 (변수는 UserList 서버에 의해 프론트 엔드로 전달됨)
Tr
TD #{item.username}
TD #{item.telephone}
TD #{item.email}
부록처럼 :
코드 사본은 다음과 같습니다.
확장 ../admin_layout
머리를 부여하십시오
링크 (rel = '스타일 시트', href = '/Stylesheets/font-awesome.css')
스크립트 (src = '/javascripts/bootstrap.js')
스크립트 (src = '/javascripts/bootstrap-wysiwyg.js')
스크립트 (src = '/javascripts/jquery.hotkeys.js')
컨텐츠 차단
Append는 모든 단계와 스타일을 마스터 페이지의 헤드 뒤에 배치합니다.
2. ORM을 구현하기위한 프레임 워크를 정렬합니다. sqlite mysql mongodb를 지원합니다
모델 정의 (기사) :
코드 사본은 다음과 같습니다.
var article = sequelize.define ( 'article', {
제목:{
유형 : sequelize.string,
검증 : {}
},
내용 : {type : sequelize.string, Validate : {}},
아이콘 : {type : sequelize.string, validate : {}},
iconname : {type : sequelize.string},
시퀀싱 : {type : sequelize.string, Validate : {}}
}, {
클래스 메트 : {
// 기사 분류
getCountall : function (objfun) {
} // getCountall을 끝내십시오
} // classMethods를 종료합니다
});
article.belongsto (카테고리);
article.belongsto (카테고리); 각 기사에는 카테고리가 있습니다.
나는 속편을 초기화 할 때 페이징 관련 방법을 썼습니다. 이러한 방식으로 각 모델을 정의 할 때이 메소드 (PageOffset, Pagelimit)가 있습니다.
코드 사본은 다음과 같습니다.
var sequelize = new sequelize ( 'database', 'username', 'password', {
// sqlite! 지금!
방언 : 'sqlite',
// sqlite 용 저장 엔진
//- 기본값 ': 메모리 :'
스토리지 : config.sqlitepath,
정의하다:{
클래스 메트 : {
PageOffset : function (pagenum) {
if (isnan (pagenum) || pagenum <1) {
pagenum = 1;
}
return (pagenum -1) * this.pagelimit ();
},
pagelimit : function () {
반환 10; // 페이지 당 10 개 항목이 표시됩니다
},
TotalPages : 함수 (TotalNum) {
var total = parseint ((Totalnum + this.pagelimit () -1) / this.pagelimit ()),
ArrayTotalPages = [];
for (var i = 1; i <= total; i ++) {
ArrayTotalPages.push (i);
}
반환 배열;
}
},
Instancemethods : {
}
}
});
사용:
코드 사본은 다음과 같습니다.
article.findandCountall ({include : [category], 오프셋 : article.pageoffset (req.query.pagenum), 한계 : article.pagelimit ()}). 성공 (함수 (행) {
res.render ( 'article_list', {
제목 : '기사 관리',
Articlelist : Row.rows,
페이지 : {
TotalPages : article.totalPages (row.count),
CurrentPage : Req.Query.pagenum,
라우터 : '기사'
}
});
});
모델 저장 :
코드 사본은 다음과 같습니다.
Exports.add = function (req, res) {
var form = new commidable.incomingform ();
form.uploaddir = path.join (__ dirname, '../files');
form.keepextensions = true;
form.parse (req, function (err, fields, files) {
var // iconpath = files.icon.path,
// index = iconpath.lastIndexof ( '/') <= 0? iconpath.lastindexof ( '//') : iconpath.lastindexof ( '/'),
icon = path.basename (files.icon.path), // iconpath.substr (index + 1, iconpath.length -index),
iconname = files.icon.name;
var title = fields.title;
id = fields.articleid;
제목 = fields.title,
content = fields.content,
mincontent = fields.mincontent,
시퀀싱 = Fields.Sequencing == 0? 0 : 1,
카테고리 = fields.category;
article.sync (); // 테이블이 존재하지 않으면 테이블을 만듭니다.
카테고리 find (category) .success (function (c) {
var article = article.build ({
제목 : 제목,
내용 : 내용,
Mincontent : Mincontent,
아이콘 : 아이콘,
Iconname : iconname,
시퀀싱 : 시퀀싱
});
article.save ()
.success (function (a) {
A. 세트 카테고리 (c);
return res.redirect ( '/admin/article');
});
}); // 종료 카테고리
});
}
Path.baseName :
코드 사본은 다음과 같습니다.
// iconpath = files.icon.path,
// index = iconpath.lastIndexof ( '/') <= 0? iconpath.lastindexof ( '//') : iconpath.lastindexof ( '/'),
icon = <strong> path.basename </strong> (files.icon.path), // iconpath.substr (index + 1, iconpath.length -index),
파일 이름을 가져옵니다 (예 : /a/b/aa.txt => aa.txt). 처음에는 가로 채는 문자열을 사용하여 구현할 수 있었지만 운영 체제가 다르면 문제가 있습니다. Mac은 '/'를 사용합니다. 다음은 창에서 '//'입니다. 또한 배포가 완료된 후 문제를 발견했습니다. 나중에 나는 경로를 발견했다. BaseName은 직접 교체되었다 (문서를 덜 읽으면 손실이 발생한다). Node.js에 1 점을 추가하는 데 좋은 인상이 있습니다. :)
3. Redis는 캐시를 자주 쿼리하고 데이터를 거의 변경하지 않습니다.
코드 사본은 다음과 같습니다.
getCountall : function (objfun) {
redis.get ( 'articles_getCountall', function (err, reply) {
if (err) {
Console.log (err);
반품;
}
if (reply === null) {
DB.ALL ( 'count (article.categoryID)는 count, categors.name, categories.id articles.categoryId = category.id articles.categoryId', function (err, row) {group에서 카테고리가 결합 된 articles on articles as count, category.name, category.id.
redis.set ( 'articles_getCountall', json.stringify (row));
objfun (행);
});
}또 다른{
objfun (답장);
}
});
이 방법은 모델 계층에 정의됩니다. Express이므로 MVC 방법을 사용하여 최대한 많이 개발하십시오. 실제로, 경로는 컨트롤러 계층 함수 (Route Folder, 컨트롤러라는 이름)를 구현합니다.