node.js를 사용하여 website_node.js의 프런트엔드와 백엔드를 생성하세요.
node.js는 무엇을 할 수 있나요? 나는 아직도 그것이 널리 사용되는 곳을 모릅니다. 그런 프로젝트를 접할 기회가 없습니다. 그냥 좋아서 틈틈이 웹사이트와 백엔드를 만들었어요. 나는 기술이 마음에 들면 가지고 놀 수 있지만 프로젝트에 사용하려면 많은 문제를 해결하는 데 시간을 투자해야 한다는 사실을 깊이 이해합니다.
사용된 기술:
익스프레스 + 옥
sqlite + 후속작
레디스
1. 옥에 대하여
지원이 포함됩니다. 예: include ./includes/header 헤더는 asp.net 사용자 컨트롤과 유사한 부분 보기입니다.
지원이 연장됩니다. 예를 들어, 확장 ../layout은 마스터 페이지 레이아웃을 사용합니다.
for 루프도 너무 간단합니다.
userList의 각 항목(서버가 프런트엔드로 전달한 userList 변수)
트
td #{item.username}
td #{item.telephone}
td #{item.email}
추가 선호:
확장 ../admin_layout
머리 추가
link(rel='stylesheet', href='/stylesheets/font-awesome.css')
스크립트(src='/javascripts/bootstrap.js')
스크립트(src='/javascripts/bootstrap-wysiwyg.js')
스크립트(src='/javascripts/jquery.hotkeys.js')
콘텐츠 차단
추가하면 마스터 페이지 헤드 뒤에 모든 단계와 스타일이 배치됩니다.
2.sequelize는 ORM 프레임워크를 구현합니다. sqlite mysql mongodb 지원
정의 모델(기사):
var Article =sequelize.define('기사',{
제목:{
유형:Sequelize.STRING,
유효성 검사:{}
},
콘텐츠:{type:Sequelize.STRING,검증:{}},
아이콘:{유형:Sequelize.STRING,검증:{}},
아이콘 이름:{type:Sequelize.STRING},
시퀀싱:{type:Sequelize.STRING,검증:{}}
},{
클래스메소드:{
//기사 카테고리
GetCountAll:함수(objFun){
}//getCountAll 종료
}//classMethod 종료
});
Article.belongsTo(카테고리);
Article.belongsTo(Category); 각 기사에는 카테고리가 있습니다.
Sequelize 초기화 시 페이징 관련 메소드를 작성했습니다. 이런 식으로 각 모델을 정의하면 이 메서드(pageOffset, pageLimit)가 생깁니다.
var 후속작 = new Sequelize('데이터베이스', '사용자 이름', '비밀번호', {
// SQLite! 지금!
방언: 'sqlite',
// sqlite용 스토리지 엔진
// - 기본값 ':memory:'
저장소: config.sqlitePath,
정의:{
클래스메소드:{
pageOffset:함수(pageNum){
if(isNaN(pageNum) || pageNum < 1){
페이지번호 = 1;
}
return (pageNum - 1) * this.pageLimit();
},
pageLimit:함수(){
10을 반환합니다. //每页显示10条
},
totalPages:함수(totalNum){
var total =parseInt((totalNum this.pageLimit() - 1) / this.pageLimit()),
arrayTotalPages = [];
for(var i=1; i<= total; i ){
arrayTotalPages.push(i);
}
arrayTotalPages 반환;
}
},
인스턴스메소드:{
}
}
});
사용 용도:
Article.findAndCountAll({include:[Category],offset:Article.pageOffset(req.query.pageNum),limit:Article.pageLimit()}).success(function(row){
res.render('article_list', {
제목: '文章管理',
기사 목록 : row.rows,
페이지:{
totalPages:Article.totalPages(row.count),
currentPage:req.query.pageNum,
라우터:'기사'
}
});
});
保存模型:
수출.추가 = 함수(req, res) {
var form = new formidable.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),
아이콘 이름 = files.icon.name;
var title = fields.title;
id = fields.articleId;
제목 = 필드.제목,
콘텐츠 = fields.content,
mincontent = fields.mincontent,
시퀀싱=fields.sequencing == 0 ? 0 : 1,
카테고리 = fields.category;
기사.sync(); //如果不存就创建表。
Category.find(범주).success(함수(c){
var 기사 = Article.build({
제목 : 제목,
내용:내용,
최소 콘텐츠:최소 콘텐츠,
아이콘:아이콘,
아이콘이름:아이콘이름,
시퀀싱:시퀀싱
});
기사.저장()
.success(함수(a){
a.setCategory(c);
return res.redirect('/admin/article');
});
}); //카테고리 종료
});
}
경로.기본 이름:
//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),
获取文件name,比如:/a/b/aa.txt => aa.txt. 最初时候我使用截取字符串,也能实现,但是操作系统不一样的话就会有问题。mac使用'/' . window下side是'\',我也是part署完成之后才发现的问题 . 后来发现path.basename 直接替换(文档阅读的少,就吃亏啊)。对node.js的好感재加1分。:)
3. redis 缓存经常查询,而且很少变化的数据。
getCountAll:함수(objFun){
redis.get('articles_getCountAll', function(err,reply){
if(err){
console.log(err);
반품;
}
if(회신 === null){
db.all('SELECT count(articles.CategoryId) as count,categories.name,categories.id 왼쪽 기사에서 기사의 카테고리 조인.categoryID = 카테고리.id 기사별로 그룹화.CategoryId ', function(err,row){
redis.set('articles_getCountAll',JSON.stringify(row));
objFun(행);
});
}그 외{
objFun(답글);
}
});
이 방법은 모델 레이어에 정의되어 있습니다. Express이기 때문에 최대한 MVC를 이용하여 개발하였습니다. 실제로 Route는 컨트롤러 레이어 기능을 구현합니다(라우트 폴더 이름은 컨트롤러로 지정해야 함).

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Discuz 백그라운드 로그인 문제에 대한 해결책이 공개되었습니다. 인터넷의 급속한 발전으로 인해 웹 사이트 구축이 점점 보편화되고 있으며 일반적으로 사용되는 포럼 웹 사이트 구축 시스템으로 Discuz가 선호되고 있습니다. 많은 웹마스터. 그러나 강력한 기능으로 인해 Discuz를 사용할 때 백그라운드 로그인 문제와 같은 몇 가지 문제가 발생할 수 있습니다. 오늘은 Discuz 백그라운드 로그인 문제에 대한 해결책을 공개하고 구체적인 코드 예시를 제공하여 도움이 필요한 분들에게 도움이 되기를 바라겠습니다.

Non-Blocking, Event-Driven 기반으로 구축된 Node 서비스는 메모리 소모가 적다는 장점이 있으며, 대규모 네트워크 요청을 처리하는데 매우 적합합니다. 대규모 요청을 전제로 '메모리 제어'와 관련된 문제를 고려해야 합니다. 1. V8의 가비지 수집 메커니즘과 메모리 제한 Js는 가비지 수집 기계에 의해 제어됩니다.

이 기사는 NodeJS V8 엔진의 메모리 및 가비지 수집기(GC)에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다.

파일 모듈은 파일 읽기/쓰기/열기/닫기/삭제 추가 등과 같은 기본 파일 작업을 캡슐화한 것입니다. 파일 모듈의 가장 큰 특징은 모든 메소드가 **동기** 및 ** 두 가지 버전을 제공한다는 것입니다. 비동기**, sync 접미사가 있는 메서드는 모두 동기화 메서드이고, 없는 메서드는 모두 이기종 메서드입니다.

Node용 Docker 이미지를 선택하는 것은 사소한 문제처럼 보일 수 있지만 이미지의 크기와 잠재적인 취약점은 CI/CD 프로세스와 보안에 상당한 영향을 미칠 수 있습니다. 그렇다면 최고의 Node.js Docker 이미지를 어떻게 선택합니까?

WordPress 백엔드 잘못된 코드가 걱정되나요? 이러한 솔루션을 사용해 보십시오. 웹 사이트 구축에 WordPress가 널리 적용되면서 많은 사용자가 WordPress 백엔드에서 잘못된 코드 문제에 직면할 수 있습니다. 이러한 종류의 문제로 인해 배경 관리 인터페이스에 잘못된 문자가 표시되어 사용자에게 큰 문제를 야기합니다. 이 문서에서는 사용자가 WordPress 백엔드에서 잘못된 문자 문제를 해결하는 데 도움이 되는 몇 가지 일반적인 솔루션을 소개합니다. wp-config.php 파일을 수정하고 wp-config를 엽니다.

Node.js는 GC(가비지 수집)를 어떻게 수행하나요? 다음 기사에서는 이에 대해 설명합니다.

노드가 npm 명령을 사용할 수 없는 이유는 환경 변수가 올바르게 구성되지 않았기 때문입니다. 해결 방법은 다음과 같습니다. 1. "시스템 속성"을 엽니다. 2. "환경 변수" -> "시스템 변수"를 찾은 다음 환경을 편집합니다. 3. nodejs 폴더의 위치를 찾습니다. 4. "확인"을 클릭합니다.
