폼 작성 전에 먼저 app.js 소스코드를 살펴보도록 하겠습니다

var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); // 여기가지 모듈을 불러오는 부분입니다.

var routes = require('./routes/index'); var users = require('./routes/users'); // routes의 경로를 변수명으로 지정하고 아래 app.use('/', routes) 부분으로 경로를 넘겨준게 보이네요.

var app = express(); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); // 뷰 엔진으로 ejs를 사용했다고 나옵니다.


app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes);

// url 경로에서 '/' 일 경우 위에서 설정한 경로에 존재하는 routes를 사용하라고 하네요. app.use('/users', users);

// '/users' 일 경우 위에서 지정한 users 경로에 있는 routes로 되어있네요.



이제 view 에서 html 폼(form)을 하나 만들어서 값을 입력하고 서버로 보내보겠습니다.

기존에 있던 index.ejs 안에 body 태그 안에 form 태그를 넣겠습니다.

<body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <form action="/name" method="POST">
         <input type="text" name = "user_name">
         <button type="submit">submit</button>
    </form>
</body>

/name 경로로 form 태그 안에 있는 user_name을 POST로 보내도록 했습니다. 


이제 app.js로 가서 소스코드를 추가 하도록 하겠습니다.

var name = require('./routes/name');

-- 생략 --


app.use(bodyParser.urlencoded({extended:true}));

// 중간에 이 부분에서 extended : false로 되어있을텐데 이걸 true로 바꿔주세요.


-- 생략 --

app.use('/name', name);



이제 routes 폴더로 가서 name.js 를 하나 만듭니다.

var express = require('express'); var router = express.Router(); router.post('/', function(req, res){ res.send('Name : ' + req.body.user_name); console.log('Name : ' + req.body.user_name); });  

module.exports = router; 


이제 모든 작성이 끝났습니다. 터미널에서 npm start를 입력하고 브라우저를 열어 localhost:3000으로 갑니다



이제 이름 칸에 이름을 입력하고 submit 해봅니다.


/name 으로 이동했고 입력한 이름이 표시되는 걸 확인할 수 있습니다. 

터미널을 확인하면 아래와 데이터를 받은걸 볼 수 있습니다.

GET / 200 15.020 ms - 334
GET /stylesheets/style.css 304 4.766 ms - -
Name : mike
POST /name 200 24.505 ms - 11


만약 폼 처리 후 특정 경로로 이동하고 싶을 경우 routes/name.js 에서 res.redirect(303, '/경로'); 를 추가하면 됩니다.




반응형

이전 글 까지는 express 모듈을 불러와서 앱서로 만드는 방법을 설명했습니다. 이번에는 템플릿을 만들어보도록 하겠습니다. 모든 프로젝트에는필수적인 코드를 다시 짠다는건 생각만 해도.. 따라서 프로젝트의 기본적인 뼈대를 만들어놓고 프로젝트를 시작하도록 하는게 좋을거 같습니다. 뷰 엔진(클라이언트에게 보여지는 부분)에는 핸들바, jade, ejs, hogan이 존재합니다. 저는 친숙한 ejs로 제작할까 합니다.


먼저 generator를 설치하도록 하겠습니다.(http://expressjs.com/en/starter/generator.html )

$ npm install express-generator -g



이제 템플릿을 만들도록 하겠습니다. 

$ express myapp --ejs

express 템플릿을 만들 myapp이라는 이름으로 폴더를 저장하고 뷰 엔진을 ejs로 설정했습니다. 만약 --ejs를 뺀다면 default값인 jade가 설치됩니다(express 제작자와 jade 제작자가 같습니다). 또한 폴더 이름을 적지 않는다면 그 경로에 템플릿 엔진을 설치하게 됩니다. express만 입력하게 되면 해당 경로에 jade로 템플릿을 설치하게 됩니다.

.
├── app.js
├── bin
│   └── www
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
    ├── error.ejs
    ├── index.ejs
    └── layout.ejs

설치를 마치게 되면 다음과 같은 경로로 뼈대가 생성됩니다.



이제 해당 경로에 npm 을 설치하고 실행해보도록 하겠습니다.

$ npm install

$ npm start


> myapp@0.0.0 start /node/myapp

> node ./bin/www




다음과 같이 웹서버가 실행된걸 확인할 수 있습니다. 이제 브라우저로 http://localhost:3000/ 로 들어가보면 welcome to express 를 볼 수 있습니다.


views 경로로 들어가서 index.ejs의 소스코드를 보면 다음과 같이 되어있습니다. 

/views/index.ejs


<!DOCTYPE html>

<html>

<head>

<title><%= title %></title>

      <link rel='stylesheet' href='/stylesheets/style.css' />

</head>

<body>

<h1><%= title %></h1>

<p>Welcome to <%= title %></p>

</body>

</html>

<% %> 안에 자바스크립트 코드를 넣으면 됩니다. <%= %>는 표현식으로 어디선가 index.ejs로 title이라는 값을 보냈네요. 

이제 views 폴더에서 올라가 routes 폴더로 가면 index.js라는 파일이 있습니다. 이것도 소스코드를 보겠습니다.

/routes/index.js


var express = require('express');

var router = express.Router();

/* GET home page. */


router.get('/', function(req, res, next) {

res.render('index', { title: 'Express' });

});


module.exports = router;

router.get 함수 안에 res.render('index', {title : 'Express' }); 문장을 보면 index.ejs로 title의 값을 'Express'라고 지정하고 데이터를 보내는 부분이 있네요. 따라서 routes 에서 views로 데이터를 전송한다는걸 알수 있네요.


다음에는 메인 파일인 app.js 에 대해서 파악해보고 포트 변경도 해보겠습니다.


반응형

Node.js의 생산성을 극대화 하기 위해 프레임워크를 설치해보려고 합니다. 그 중 가장 대표적인 Node.js의 프레임워크인 express를 설치하는 방법을 설명하겠습니다.


먼저 폴더 하나를 만들고 터미널을 만든 폴더 경로로 이동합니다. 

터미널에 아래와 같이 입력합니다.npm init을 입력하면 여러가지 묻게 되는데 가볍게 엔터를 연타합니다. 

그러면 아래와 같이 엔터 친 내용들이 나오면서 package.json 파일이 설치가 될겁니다.

(http://expressjs.com/en/starter/installing.html)

$ npm init


..생략..


{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }

package.json 파일이 설치된게 확인이 되면 터미널에서 npm을 통해 express를 설치하도록 합니다.

$ npm install express --save

설치가 끝나고 폴더를 확인해보면 node_module폴더와 package.json 파일이 있습니다.


설치가 끝나면 웹서버 파일을 하나 만들고 브라우저에 hello world를 찍어보도록 하겠습니다.

app.js로 파일을 만들고 아래와 같은 소스코드를 넣고 저장해보겠습니다.

http://expressjs.com/en/starter/hello-world.html )

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});


이제 app.js 를 실행해보겠습니다.

node app.js

Example app listening at http://:::3000

브라우저로 localhost:3000으로 들어가보면 hello world 가 찍히는게 보입니다. 

node_module에 들어가게 되면 express 모듈을 확인할 수 있습니다. require('express')를 통해서 express 모듈을 불러오게 되고 express를 통해 웹서버를 실행하는 예제를 해봤습니다.


반응형

Node.js는 apache와 다르게 특정 경로에서 설정과 소스코드를 수정하는게 아니라 내가 만든 경로에 모듈과 설정, 소스코드들을 위치하고 서버를 실행하게 됩니다.


먼저 폴더를 하나 만들고 그 안에 app.js 라는 이름으로 자바스크립트 파일을 하나 만듭니다.

그리고 app.js에 서버가 될 수 있도록 소스코드를 넣도록 하겠습니다. 

https://nodejs.org/en/about/

const http = require('http');

const hostname = '127.0.0.1';
const port = 1337;

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
}).listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
app.js 파일을 저장하고 실행해보겠습니다.

폴더 경로로 이동하고 node app.js 를 입력합니다.

아래와 같이 서버가 실행 됐다고 하면 정상 작동 중입니다. 

$ node app.js

Server running at http://127.0.0.1:1337/

브라우저를 키고 http://127.0.0.1:1337/ 를 입력하면 Hello World 라고 나오는걸 확인할 수 있습니다.


만약 포트를 80포트로 설정할 경우 아래와 같은 에러를 출력하게 됩니다.

events.js:141

      throw er; // Unhandled 'error' event

      ^

Error: listen EACCES 127.0.0.1:80

    at Object.exports._errnoException (util.js:874:11)

    at exports._exceptionWithHostPort (util.js:897:20)

    at Server._listen2 (net.js:1221:19)

    at listen (net.js:1270:10)

    at net.js:1379:9

    at doNTCallback3 (node.js:452:9)

    at process._tickCallback (node.js:358:17)

    at Function.Module.runMain (module.js:469:11)

    at startup (node.js:136:18)

    at node.js:963:3

그럴 땐 sudo 를 붙여서 실행하면 정상 작동합니다.

$ sudo node app.js


반응형

저는 AWS EC2에 ubuntu를 설치했습니다. 그래서 ubuntu에서 node 설치하는 방법과 개발하는 방법을 작성하려 합니다.

먼저 Node.js 홈페이지에 가서 DOWNLOADS (https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions)에서 아래 코드를 복사합니다.

curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y build-essential

터미널을 열어서 실행하게 되면 설치가 끝납니다. 제대로 설치가 됐는지 확인하기 위해서 node -v 라고 입력하면 아래와 같이 버전 정보가 나오면 잘 설치되었습니다.

$ node -v
$ v5.2.0

node 설치가 끝나면 npm을 설치해야 합니다.  

npm(https://www.npmjs.com/) 은 Node Packaged Modules 로써 필요한 node 모듈들을 설치하는 패키지 매니저입니다. (a package manage for JavaScript)

$ sudo apt-get install npm
이제 다 설치가 끝났습니다. 

모든 프로그래밍의 시작인 hello world를 실행해보도록 하겠습니다.

원하는 경로로 이동 후 hello.js 파일을 만들고 그 안에 내용을 넣고 저장을 합니다.

console.log('hello world');

이제 터미널을 키고 hello.js를 실행시킵니다.

$ node hello.js

hello world

hello world 가 출력되면 끝. 

파일을 직접 안만들고 바로 테스트 할 수도 있습니다. 

$ node

> console.log('hello world');

hello world

undefined

실행된 node를 종료하는 방법은 ctrl + c를 2번 누르면 종료하게 됩니다.


반응형

+ Recent posts