nodejs를 실행하게하십시오
첫 번째 단계는 물론 NodeJS 환경을 설치하는 것입니다. Windows가 NodeJS를 더 빠르게 설치하므로 직접 다운로드 할 수 있습니다.
http://www.nodejs.org/download/
필요에 따라 다운로드하십시오. 다운로드가 완료되면 다음 단계로 이동하십시오. 그 후, 우리는 nodejs 환경을 가질 것입니다.
두 번째 단계는 후속 작업을 용이하게하기 위해 디스크 D에서 폴더 블로그를 직접 보았습니다.
그런 다음 Windows 명령 줄 도구를 열고 D 디스크를 입력하고 다음을 입력하십시오.
다음과 같이 코드를 복사하십시오. Express -e 블로그
그런 다음 내부에 종속성 패키지가있을 수 있습니다. 설치하려면 블로그 디렉토리를 입력해야합니다 (설치 구성은 package.json에 의해 제공됨) :
다음과 같이 코드를 복사하십시오. NPM 설치
이러한 방식으로 패키지 및 Java 패키지 파일에 따라 의존성 패키지를 다운로드하고 .NET BLL 파일은 개념이어야합니다.
현재 우리의 프로그램은 실행할 준비가되었습니다.
코드를 다음과 같이 복사하십시오 : 노드 앱
다음과 같이 코드를 복사하십시오.
현재 브라우저를 열면 응답이 나타납니다.
여기서 우리는 Express (인기있는 nodejsweb 개발 프레임 워크)를 사용하고 있으며 EJS 템플릿 엔진을 사용합니다.
파일 구조
초기화 파일 디렉토리 구조는 다음과 같습니다.
app.js는 항목 파일입니다
package.json은 모듈 종속성 파일입니다. NPM 설치를 사용하면 구성에 따라 관련 패키지를 온라인으로 다운로드합니다.
node_modules는 다운로드 된 모듈 파일 (package.json)입니다.
공공 장소는 정적 리소스 파일을 저장합니다
라우팅은 라우팅 파일을 저장합니다
보기 저장 관련보기 템플릿 파일
이런 식으로 기본 디렉토리 구조가 나옵니다. Node_Modules 디렉토리에 대해 간단히 이야기 해 봅시다.
node_modules/ejs
우리는 방금 다운로드 된 모듈이 여기에 저장되어 있다고 말했습니다. 무뚝뚝하게 말하면 JS 파일 모음입니다.
코드 사본은 다음과 같습니다.
var parse = exports.parse = function (str, 옵션) {
var 옵션 = 옵션 || {}
, open = 옵션. 오렌 || 내보내기 '<%'
, close = 옵션 .close || Exports.close || '%>'
, filename = 옵션 .filename
, compiledebug = 옵션.compiledebug! == false
, buf = "";
buf += 'var buf = [];';
if (false! == Options._with) buf += '/nwith (locals || {}) {(function () {';
buf += '/n buf.push (/' ';
var lineno = 1;
var 소비자 = 거짓;
for (var i = 0, len = str.length; i <len; ++ i) {
var stri = str [i];
if (str.slice (i, open.length + i) == Open) {
i += Open.Length
var prefix, postfix, line = (compiledebug? '__stack.lineno =': '') + lineno;
스위치 (str [i]) {
CASE '=':
Prefix = " ', Escape ((" + line +', ';
postfix = ")), '";
++ i;
부서지다;
사례 '-':
Prefix = " ', (" + line +', ';
postfix = "), '";
++ i;
부서지다;
기본:
접두사 = " ');" + 줄 + ';';
postfix = "; buf.push ( '";
}
var end = str.indexof (Close, i)
, js = str.substring (i, end)
, 시작 = i
, 포함 = null
, n = 0;
if ( '-'== js [js.length-1]) {
js = js.substring (0, js.length -2);
소비자 = 참;
}
if (0 == js.trim (). indexof ( 'include')) {
var name = js.trim (). slice (7) .trim ();
if (! filename) Throw New Error ( 'filename 옵션이 포함되어야한다');
var path = resolveInclude (이름, filename);
포함 = read (path, 'utf8');
포함 = Exports.parse (포함, {filename : path, _with : false : open, close : close, compiledebug : compiledebug});
buf + = " ' + (function () {" + include + "}) () +'";
js = '';
}
while (~ (n = js.indexof ( "/n", n))) n ++, lineno ++;
if (js.substr (0, 1) == ':') js = 필터링 (js);
if (js) {
if (js.lastIndexof ( '//')> js.lastIndexof ( '/n')) js += '/n';
buf += 접두사;
buf += js;
buf += postfix;
}
I + = END -START + CLOSE.LENGTH -1;
} else if (stri == "//") {
buf += "////";
} else if (stri == " '") {
buf += "// '";
} else if (stri == "/r") {
// 무시하다
} else if (stri == "/n") {
if (consideol) {
소비자 = 거짓;
} 또 다른 {
buf += "// n";
Lineno ++;
}
} 또 다른 {
buf += stri;
}
}
if (false! == Options._with) buf += " ');}) (); /n} /nreturn buf.join (' ');";
else buf += " ');/nreturn buf.join (' ');";
반환 buf;
};
우리가 여기서 사용한 EJS 템플릿 및 익스프레스 모듈과 마찬가지로, 우리는 그 차이가 무엇인지 확인하기 위해 흥미롭게 EJS 프로그램에 들어갔다.
열린 후, EJS.JS는 읽을 코드를 그립니다. 우리는이 코드에 더 익숙합니다. 밑줄의 템플릿 엔진 코드와 일치하며 템플릿을 문자열로 구문 분석합니다.
그런 다음 평가 또는 새 함수 메소드를 통해 함수로 변환하여 구문 분석을 위해 자체 데이터 객체로 전달하십시오.
특정 워크 플로에 관해서는 아직 알지 못하므로 나중에 공부하는 시점에만 넣을 수 있습니다. 자, 지금 다른 모듈로 가자.
app.js
항목 파일로서 App.js는 중요한 역할을합니다.
코드 사본은 다음과 같습니다.
/**
* 모듈 종속성.
*/
var express = 요구 사항 ( 'Express');
var lours = require ( './ loures');
var user = require ( './ lours/user');
var http = 요구 ( 'http');
var path = 요구 ( '경로');
var app = express ();
// 모든 환경
app.set ( 'port', process.env.port || 3000);
app.set ( 'views', path.join (__ dirname, 'views'));
app.set ( '보기 엔진', 'ejs');
app.use (express.favicon ());
app.use (Express.Logger ( 'dev'));
app.use (Express.json ());
app.use (express.urlencoded ());
app.use (express.methodoverride ());
app.use (app.router);
app.use (express.static (path.join (__ dirname, 'public')));
// 개발 전용
if ( 'development'== app.get ( 'Env')) {
app.use (Express.errorHandler ());
}
app.get ( '/', rounes.index);
app.get ( '/user', user.list);
http.createserver (app) .listen (app.get ( 'port'), function () {
Console.log ( 'Port에서 Express Server 청취' + app.get ( 'port'));
});
requess () 명령을 통해 Express 및 HTTP 모듈을로드하고 Loutes 디렉토리에 인덱스 사용자 및 기타 템플릿 파일을로드합니다.
app.set ( 'port', process.env.port || 3000)은 시작시 포트입니다
app.set ( 'views', __dirname + '/views')는 템플릿 파일을 저장하는 경로입니다. 여기서 __dirname은 현재 스크립트가있는 디렉토리를 저장하는 글로벌 변수입니다. 이런 식으로 볼 수 있습니다.
코드 사본은 다음과 같습니다.
console.log (__ dirname); // index.js 다음 코드를 추가합니다
/**
d :/blog> 노드 앱
Express Server Li
D :/블로그/경로
*/
이 __dirname을 얻는 방법에 관해서는, 우리는 당분간 이에주의를 기울일 필요가 없습니다.
app.set ( '보기 엔진', 'ejs') 템플릿 엔진을 EJS로 설정합니다
app.use (express.favicon ())은 아이콘을 설정하여 수정 한 다음 공개 아래에서 이미지 파일을 만들 수 있습니다.
app.use (Express.Logger ( 'dev')); Express는 Connect에 따라 다르며 내장형 미들웨어는 일부 로그를 출력합니다.
app.use (Express.json ()); 문자열이 JSON 객체로 동적으로 변환되는 요청 본문을 구문 분석하는 데 사용됩니다.
app.use (express.methodoverride ()); 내장 미들웨어를 게시하여 게시물 요청을 처리하고 Put 및 기타 HTTP 방법을 위장 할 수 있습니다.
app.use (app.router); 라우터 해상도 규칙을 호출하십시오
app.use (express.static (path.join (__ dirname, 'public'))); 내장 미들웨어를 연결하고, 루트 디렉토리에서 공개 설정을 설정하여 정적 파일을 저장
코드 사본은 다음과 같습니다.
if ( 'development'== app.get ( 'Env')) {
app.use (Express.errorHandler ());
}
이 문장은 개발 조건에서 오류 정보가 출력되어야 함을 의미합니다.
코드 사본은 다음과 같습니다.
app.get ( '/', rounes.index);
app.get ( '/user', user.list);
이 두 문장은 액세스 시간에 특정 처리 파일입니다. 예를 들어, 여기에서 직접 액세스 할 때 기본 액세스는 lours.index입니다.
그런 다음 실제로 템플릿 데이터를 내부에 구문 분석합니다.
코드 사본은 다음과 같습니다.
Exports.index = function (req, res) {
Console.log (__ dirname);
res.render ( 'index', {title : 'express'});
};
마지막으로, 위의 코드는 HTTP 서버를 생성하고 포트 3000을 듣기 위해 호출됩니다. 성공 후 웹 페이지에서 액세스 할 수 있습니다.
라우팅
우리는이 방법을 사용하여 경로를 구축했습니다
코드 사본은 다음과 같습니다. app.get ( '/', lours.index);
위의 코드는이 코드 (앱에 작성)로 대체 할 수 있습니다.
코드 사본은 다음과 같습니다.
app.get ( '/', function (req, res) {
res.render ( 'index', {title : 'express'});
});
이 코드는 홈페이지에 액세스 할 때 EJS 템플릿 엔진이 호출되어 index.ejs 템플릿 파일을 렌더링합니다.
이제 약간의 수정을하십시오. 위의 코드는 라우팅 기능을 구현하지만 라우팅 관련 코드를 앱에 넣을 수는 없습니다. 경로가 너무 많으면 앱이 부풀어 오르기 때문에 관련 구성을 색인에 넣습니다.
따라서 앱에서 관련 라우팅 기능을 삭제하고 앱 끝에 코드를 추가하십시오.
코드 사본은 다음과 같습니다. lours (app);
그런 다음 Index.js를 수정하십시오
코드 사본은 다음과 같습니다.
module.exports = function (app) {
app.get ( '/', function (req, res) {
res.render ( 'index', {title : 'express'});
});
};
이 코드가 구성된 방법은 아직 명확하지 않으므로 더 이상주의를 기울이지 않을 것입니다. 나중에 살펴 보겠습니다
라우팅 규칙
Express는 여러 HTTP 요청을 캡슐화합니다. 일반적으로 Get/Post 2를 사용합니다.
코드 사본은 다음과 같습니다.
app.get ();
app.post ();
첫 번째 매개 변수는 요청 경로, 두 번째 매개 변수는 콜백 함수이거나 두 매개 변수는 요청 및 응답입니다.
그런 다음 Req (요청)의 경우 다음 규칙이 있습니다
req.Query 처리 요청 GET 및 GET 요청 매개 변수를 가져옵니다.
req.params handles /: xxx form get 또는 post request
Req. Body는 사후 요청을 처리하고 게시물 요청 본문을받습니다.
req.params는 get and post 요청을 처리하지만 검색 우선 순위는 req.params-> req.body-> req.query입니다.
경로 규칙은 또한 규칙 성을 지원하고 나중에 세부 사항에 대해 이야기 할 것입니다 ...
라우팅 규칙을 추가하십시오
존재하지 않는 링크에 액세스 할 때 :
/y에 대한 라우팅 규칙이 없기 때문에 파일을 공개적으로 말하지 않으므로 404입니다.
이제 Index.js에 관련 경로를 추가합니다.
코드 사본은 다음과 같습니다.
module.exports = function (app) {
app.get ( '/', function (req, res) {
res.render ( 'index', {title : 'express'});
});
app.get ( '/y', function (req, res) {
Res.Send ( 'Ye Xiaochai');
});
};
여기에 페이지가 나왔습니다.
그 이유는 다운로드 후 내 파일이 GBK 인코딩이기 때문입니다. UTF-8로 변경하면됩니다. 우리는 템플릿 엔진에 신경 쓰지 않습니다. 다음 섹션으로 가자.
등록 기능
여기서 우리는 원래 블로거를 따라 간단한 등록 기능을 수행하고 Mongo DB를 데이터베이스로 사용하면 차례로 기능을 향상시킵니다.
새 등록 경로를 만들고 새 레지스터 템플릿을 만들므로 시작하겠습니다.
① 인덱스에서 새로운 경로를 만듭니다
코드 사본은 다음과 같습니다.
app.get ( '/register', function (req, res) {
res.render ( 'index', {제목 : '레지스터 페이지'});
});
코드 사본은 다음과 같습니다.
module.exports = function (app) {
app.get ( '/', function (req, res) {
res.render ( 'index', {title : 'express'});
});
app.get ( '/y', function (req, res) {
Res.Send ( 'Ye Xiaochai');
});
app.get ( '/register', function (req, res) {
res.render ( 'register', {제목 : '레지스터 페이지'});
});
코드 사본은 다음과 같습니다.
<! doctype html>
<html>
<헤드>
<title> < %= Title %> </title>
<link rel = '스타일 시트'href = '/Stylesheets/Style.css'/>
</head>
<body>
<h1> < %= 제목 %> </h1>
<form 메소드 = "post">
<div> 사용자 이름 : <input type = "text"name = "name"/> </div>
<div> 비밀번호 : <입력 유형 = "비밀번호"이름 = "비밀번호"/> </div>
<div> <입력 유형 = "제출"값 = "로그인"/> </div>
</form>
</body>
</html>
이런 식으로, 우리 페이지는 다음과 같습니다.
기본 프로그램을 사용하면 이제 데이터베이스 지원이 필요하므로 MongoDB 환경을 설치해야합니다.
Mongodb
MongoDB는 분산 파일 스토리지를 기반으로 한 NOSQL입니다. C ++로 작성되었습니다. MongoDB가 지원하는 데이터 구조는 JSON과 유사합니다. 우리는 JSON이 모든 유형을 지원할 수 있으므로 매우 복잡한 구조를 만들 수 있습니다.
코드 사본은 다음과 같습니다.
{
ID : 1,
이름 : 'Ye Xiaochai',
프인드 : [
{id : 2, 이름 : 'Su Huanzhen'},
{id : 3, 이름 : '한 페이지 책'}
]]
}
MongoDB를 설치하십시오
먼저 http://www.mongodb.org/downloads로 이동하여 설치 파일을 다운로드 한 다음 파일을 D 디스크로 복사 한 다음 MongoDB의 이름을 바꾸고 내부에 새 블로그 폴더를 만듭니다.
그런 다음 명령 줄 도구를 열어 디렉토리를 빈으로 전환하고 다음을 입력하십시오.
다음과 같이 코드를 복사하십시오. mongod -dbpath d :/mongodb/blog
블로그 폴더를 프로젝트 디렉토리로 설정하고 데이터베이스를 시작하십시오. 편의를 위해 명령을 작성하고 직접 클릭하여 데이터베이스를 시작합니다.
다음과 같이 코드를 복사하십시오
MongoDB에 링크
데이터베이스가 성공적으로 설치된 후 당사의 프로그램에는 데이터베이스를 연결하기위한 관련 "드라이버"프로그램도 필요합니다. 물론 패키지를 다운로드해야합니다 ...
package.json을 열어 종속에 새 라인을 추가하십시오
코드 사본은 다음과 같습니다.
{
"이름": "Application-Name",
"버전": "0.0.1",
"개인": 사실,
"스크립트": {
"시작": "노드 app.js"
},
"의존성": {
"Express": "3.4.8",
"ejs": "*",
"Mongodb": "*"
}
}
그런 다음 NPM 설치를 실행하여 새 종속성 패키지를 다운로드하십시오. 이런 식으로 MongoDB와 관련된 드라이버를 사용할 수 있습니다. MySQL 및 기타 데이터베이스를 연결하려면 다른 종속성 패키지가 필요합니다.
현재 데이터베이스 연결 정보를 저장하려면 루트 디렉토리에서 setting.js 파일을 만듭니다.
코드 사본은 다음과 같습니다.
module.exports = {
CookiesEcret : 'MyBlog',
DB : '블로그',
호스트 : 'localhost'
};
DB는 데이터베이스 이름이고 호스트는 데이터베이스 주소이며 CookiesEcret은 쿠키 암호화에 사용되며 데이터베이스와 관련이 없습니다.
다음으로 루트 디렉토리에 새 모델 폴더를 작성하고 모델 폴더에서 새 DB.JS를 만듭니다.
코드 사본은 다음과 같습니다.
var settings = require ( '../ settings'),
db = require ( 'mongodb'). db,
Connection = require ( 'mongodb'). Connection,
Server = require ( 'mongodb'). 서버;
module.exports = new db (settings.db, new Server (settings.host, connection.default_port), {safe : true});
코드 사본은 다음과 같습니다. new DB (settings.db, new Server (settings.host, connection.default_port), {safe : true});
데이터베이스 인스턴스를 생성하고 Module.Exports를 통해 인스턴스를 내보내기 위해 데이터베이스 이름, 데이터베이스 주소 및 데이터베이스 포트를 설정하여 요구 사항에 따라 데이터베이스를 읽고 쓸 수 있도록합니다.
데이터베이스에 성공적으로 작성해야하며 서버 측 프로그램은 게시물 정보를 처리해야하므로 Models 폴더에 새 user.js를 만듭니다.
코드 사본은 다음과 같습니다.
var mongodb = 요구 ( './ db');
기능 사용자 (사용자) {
this.name = user.name;
this.password = user.password;
};
module.exports = 사용자;
// 사용자 정보 저장
user.prototype.save = function (콜백) {
// 데이터베이스에 저장 될 사용자 문서
var user = {
이름 : this.name,
비밀번호 : this.Password
};
// 데이터베이스를 엽니 다
mongodb.open (function (err, db) {
if (err) {
리턴 콜백 (err); // error, err err 정보를 반환합니다
}
// 사용자 컬렉션을 읽습니다
db.collection ( '사용자', 함수 (err, collection) {
if (err) {
mongodb.close ();
리턴 콜백 (err); // error, err err 정보를 반환합니다
}
// 사용자 데이터를 사용자 수집에 삽입합니다
collection.insert (user, {
안전 : 사실
}, function (err, user) {
mongodb.close ();
if (err) {
리턴 콜백 (err); // error, err err 정보를 반환합니다
}
콜백 (null, user [0]); //성공! err는 null이고 저장된 사용자 문서를 반환합니다
});
});
});
};
코드 사본은 다음과 같습니다.
// 사용자 정보를 읽습니다
user.get = 함수 (이름, 콜백) {
// 데이터베이스를 엽니 다
mongodb.open (function (err, db) {
if (err) {
rec
}
// 사용자 컬렉션을 읽습니다
db.collection ( '사용자', 함수 (err, collection) {
if (err) {
mongodb.close ();
rec
}
// 사용자 이름 (이름 키) 값 이름이있는 문서 찾기 값 이름
collection.findone ({
이름 : 이름
}, function (err, user) {
mongodb.close ();
if (err) {
콜백 (err); // 실패! ERR 정보로 돌아갑니다
}
콜백 (null, user); // 성공! 쿼리 사용자 정보를 반환합니다
});
});
});
};
여기에는 데이터가 작성되고 다른 하나는 데이터를 읽습니다. 프로세서가 있습니다. 이제 Index.js 앞에 다음 프로그램을 추가해야합니다.
코드 사본은 다음과 같습니다. var user = require ( '../ models/user.js');
app.post ( '/register') 수정
코드 사본은 다음과 같습니다.
app.post ( '/register', function (req, res) {
var name = req.body.name;
var pwd = req.body.password;
var newuser = 새로운 사용자 ({
이름 : 이름,
비밀번호 : PWD
});
newuser.save (function (err, user) {
// 관련 작업, 쓰기 세션
Res.Send (사용자);
});
});
그런 다음 클릭하여 등록하면 반응이 있습니다.
현재 데이터베이스에 쓸 것인지 확인할 수없는 경우 쿼리를 위해 데이터베이스를 입력하고 먼저 데이터베이스 디렉토리로 전환 할 수 있습니다.
다음과 같이 코드를 복사하십시오 : d :/mongodb/bin>
입력하다:
다음과 같이 코드를 복사하십시오. Mongo
그런 다음 데이터베이스를 전환하여 블로그에 연결하십시오
다음과 같이 코드를 복사하십시오. 블로그 사용하십시오
마지막 입력
다음과 같이 코드를 복사하십시오 : db.users.find ()
우리 모두는 행복하게 데이터가 작성되는 것을 보았으므로 오늘의 학습은 당분간 끝났습니다.
결론
오늘 우리는 블로그를 따라 설치에서 쓰기에 이르기까지 작업을 완료했습니다. 내일 다른 측면을 추가하고 점차 Nodejs의 학습을 심화시킵니다.