-static 미들웨어-

npm install serve-static --save 설치

 

 

샘플1.

var static = require('serve-static')
app.use('/public',static(path.join(__dirname,'public')));

 위 코드처럼 설정을 하면 폴더1/public/index.html 에서 index.html에 접근하려면 바로 http://localhost:3000/index.html로 바로 접근 가능하다.

 

-body-parser 미들웨어-

app7.js

/**
 * POST 방식으로 전달된 파라미터 확인하기
 *
 * (1) 웹 브라우저에서 http://localhost:3000/public/login.html 페이지 열고 요청
 * (2) 크롬 브라우저의 Postman 앱이나 기타 POST 요청 도구를 사용하여 POST 방식으로 요청
 *     GET 방식으로 요청 시에는 웹브라우저에서 아래 URL로 요청해야 함
 *         http://localhost:3000?id=test1&password=123456
 *
 * @date 2016-10-25
 * @author Mike
 */

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
  , static = require('serve-static');

// 익스프레스 객체 생성
var app = express();

// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser를 이용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({ extended: false }))

// body-parser를 이용해 application/json 파싱
app.use(bodyParser.json())

app.use(static(path.join(__dirname, 'public')));

// 미들웨어에서 파라미터 확인
app.use(function(req, res, next) {
	console.log('첫번째 미들웨어에서 요청을 처리함.');

	var paramId = req.body.id || req.query.id;
	var paramPassword = req.body.password || req.query.password;
	
	res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
	res.write('<h1>Express 서버에서 응답한 결과입니다.</h1>');
	res.write('<div><p>Param id : ' + paramId + '</p></div>');
	res.write('<div><p>Param password : ' + paramPassword + '</p></div>');
	res.end();
});


// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 

login.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>로그인 테스트</title>
    </head>
    <body>
        <h1>로그인</h1>
        <br>
        <form method='post'>
            <table>
                <tr>
                    <td><label>아이디</label></td>
                    <td><input type='text' name="id"></td>
                </tr>
                <tr>
                    <td><label>비밀번호</label></td>
                    <td><input type="password" name="password"></td>
                </tr>
            </table>
            <input type="submit" value="전송" name=''>
        </form>
    </body>
</html>

 

-라우터 미들웨어-

사용자가 요청한 기능이 무엇인지 패스를 기준으로 구별함.

 

example

//라우터 객체 참조
var router = express.Router();

//라우팅 함수 등록
router.route('/process/login').get(...);
router.route('/process/login').post(...);
...

//라우터 객체를 app 객체에 등록
app.use('/',router);

router.route(요청패스).get(실행될 함수);
router.rout(요청패스).post(실행될 함수);
메소드 이름 설명
 get(callback) get 방식으로 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.
post(callback) post 방식으로 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.
put(callback) put 방식으로 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.
delete(callback) delete 방식으로 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.
all(callback) 모든 요청 방식을 처리하며 특정 패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다.

app8.js

/**
 * Router 객체를 이용해 라우팅 함수 등록하기
 *
 * (1) 웹 브라우저에서 http://localhost:3000/public/login2.html 페이지 열고 요청
 * (2) 크롬 브라우저의 Postman 앱이나 기타 POST 요청 도구를 사용하여 POST 방식으로 요청
 *
 * @date 2016-10-25
 * @author Mike
 */

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
  , static = require('serve-static');

// 익스프레스 객체 생성
var app = express();

// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser를 이용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({ extended: false }))

// body-parser를 이용해 application/json 파싱
app.use(bodyParser.json())

app.use('/public', static(path.join(__dirname, 'public')));


// 라우터 객체 참조
var router = express.Router();

// 라우팅 함수 등록
router.route('/process/login').post(function(req, res) {
	console.log('/process/login 처리함.');

	var paramId = req.body.id || req.query.id;
	var paramPassword = req.body.password || req.query.password;
	
	res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
	res.write('<h1>Express 서버에서 응답한 결과입니다.</h1>');
	res.write('<div><p>Param id : ' + paramId + '</p></div>');
	res.write('<div><p>Param password : ' + paramPassword + '</p></div>');
	res.write("<br><br><a href='/public/login2.html'>로그인 페이지로 돌아가기</a>");
	res.end();
});

// 라우터 객체를 app 객체에 등록
app.use('/', router);


// 등록되지 않은 패스에 대해 페이지 오류 응답
app.all('*', function(req, res) {
	res.status(404).send('<h1>ERROR - 페이지를 찾을 수 없습니다.</h1>');
});


// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 

login2.html(Action 속성 추가)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>로그인 테스트</title>
    </head>
    <body>
        <h1>로그인</h1>
        <br>
        <form method='post' action="/process/login">
            <table>
                <tr>
                    <td><label>아이디</label></td>
                    <td><input type='text' name="id"></td>
                </tr>
                <tr>
                    <td><label>비밀번호</label></td>
                    <td><input type="password" name="password"></td>
                </tr>
            </table>
            <input type="submit" value="전송" name=''>
        </form>
    </body>
</html>

 

-URL 파라미터 사용하기-

 

app8_02.js(router.route 경로에 /:name 추가)

req.params.name;-> param에서 이름을 가져옴

/**
 * Router 객체를 이용해 라우팅 함수 등록하기
 * POST로 요청할 때 URL 파라미터를 params 객체로 확인
 *
 * (1) 웹 브라우저에서 http://localhost:3000/public/login3.html 페이지 열고 요청
 * (2) 크롬 브라우저의 Postman 앱이나 기타 POST 요청 도구를 사용하여 POST 방식으로 요청
 *
 * @date 2016-10-25
 * @author Mike
 */

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
  , static = require('serve-static');

// 익스프레스 객체 생성
var app = express();

// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser를 이용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({ extended: false }))

// body-parser를 이용해 application/json 파싱
app.use(bodyParser.json())

app.use('/public', static(path.join(__dirname, 'public')));


// 라우터 사용하여 라우팅 함수 등록
var router = express.Router();

router.route('/process/login/:name').post(function(req, res) {
	console.log('/process/login/:name 처리함.');

    var paramName = req.params.name;
    
	var paramId = req.body.id || req.query.id;
	var paramPassword = req.body.password || req.query.password;
	
	res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
	res.write('<h1>Express 서버에서 응답한 결과입니다.</h1>');
    res.write('<div><p>Param name : ' + paramName + '</p></div>');
	res.write('<div><p>Param id : ' + paramId + '</p></div>');
	res.write('<div><p>Param password : ' + paramPassword + '</p></div>');
	res.write("<br><br><a href='/public/login3.html'>로그인 페이지로 돌아가기</a>");
	res.end();
});

app.use('/', router);


// 등록되지 않은 패스에 대해 페이지 오류 응답
app.all('*', function(req, res) {
	res.status(404).send('<h1>ERROR - 페이지를 찾을 수 없습니다.</h1>');
});


// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 

login3.html(액션에 경로추가)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>로그인 테스트</title>
    </head>
    <body>
        <h1>로그인</h1>
        <br>
        <form method='post' action="/process/login/mike">
            <table>
                <tr>
                    <td><label>아이디</label></td>
                    <td><input type='text' name="id"></td>
                </tr>
                <tr>
                    <td><label>비밀번호</label></td>
                    <td><input type="password" name="password"></td>
                </tr>
            </table>
            <input type="submit" value="전송" name=''>
        </form>
    </body>
</html>

/prcoess/login/mike  <-> /process/login/:name 서로 매핑해준다.

'For developer > Node.js' 카테고리의 다른 글

(Node.js)파일 업로드 기능  (0) 2020.09.08
(Node.js)쿠키와 세션  (0) 2020.09.08
(Node.js)익스프레스로 웹 서버 만들기(1)  (0) 2020.09.07
(Node.js)서버관련  (0) 2020.09.07
(Node.js)파일처리 관련(1)  (0) 2020.09.06

Express Module을 사용하는 이유? http만 모듈을 사용해서는 시간과 노력이 많이 드는 문제가 생김.

 

-익스프레스 서버 객체가 가지고 있는 메소드-

메소드 이름 설명
set(name,value) 서버 설정을 위한 속성을 지정합니다. set() 메소드로 지정한 속성은 get()메소드로 꺼내어 확인할 수 있습니다.
get(name) 서버 설정을 위해 지정한 속성을 꺼내 옵니다.
use([path,]function[,function...]) 미들웨어 함수를 사용합니다.
get([path,] function) 특정 패스로 요청된 정보를 처리합니다.

-메소드 set 의 속성 -

속성이름 설명
env 서버 모드를 설정합니다.
views 뷰들이 들어 있는 폴더 또는 폴더 배열을 설정합니다.
view engine 디폴트로 사용할 뷰 엔진을 설정합니다.
//Express 기본 모듈 불러오기
var express = require('express'),http = require('http');

//익스프레스 객체 생성
var app = express();

//기본 포트를 app 객체에 속성으로 설정
app.set('port',process.env.PORT || 3002);

//Express 서버 시작
http.createServer(app).listen(app.get('port'),function(){
    console.log('익스프레스 서버를 시작했습니다 : '+app.get('port'));
});

 

-미들웨어로 클라이언트에 응답 보내기-

 

 

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

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
    res.writeHead('200',{'content-Type':'text/html;charset=utf8'});
    res.end('<h1>Express 서버에서 응답한 결과입니다.</h1>');
});

http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

-출력-

 

-여러 개의 미들웨어를 등록하여 사용하는 방법-

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

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
    req.user = 'mike';
    next();
});

app.use('/',function(req,res,next){
    console.log('두 번째 미들웨어에서 요청을 처리함.') ;
    
   res.writeHead('200',{'content-Type':'text/html;charset=utf8'});
    res.end('<h1>Express 서버에서 '+req.user+' 응답한 결과입니다.</h1>');
    });

http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

use 메소드를 이용해 미들웨어를 만들어 준다음 다음 미들웨어로 넘길 때는 next()함수를 사용하여 넘김.

 

-익스프레스의 요청 객체와 응답 객체 알아보기-

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

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
   res.send({name:"소녀시대",age:20});
  /*  next();*/
});

app.use('/',function(req,res,next){
    console.log('두 번째 미들웨어에서 요청을 처리함.') ;
    
   res.writeHead('200',{'content-Type':'text/html;charset=utf8'});
    res.end('<h1>Express 서버에서 '+req.user+' 응답한 결과입니다.</h1>');
    });

http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

-출력결과-

메소드 이름 설명
send([body]) 클라이언트에 응답 데이터를 보냅니다.전달할 수 있는 데이터는 HTML 문자열,Buffer 객체,JSON 객체,JSON 배열입니다.
status(code) HTTP 상태 코드를 반환합니다. 상태 코드는 end()나 send() 같은 전송 메소드를 추가로 호출해야 전송할 수 있습니다.
sendStatus(statusCode) HTTP 상태 코드를 반환합니다. 상태 코드는 상태 메시지와 함께 전송됩니다.
redirect([status,]path) 웹 페이지 경로를 강제로 이동시킵니다.
render(view [, locals][,callback]) 뷰 엔진을 사용해 문서를 만든 후 전송합니다.

 

-redirect 메소드-

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

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
  res.redirect('http://google.co.kr');
});



http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

  res.redirect 메소드를 사용하여 구글 페이지로 넘긴다.

 

-익스프레스에서 요청 객체에 추가한 헤더와 파라미터 알아보기-

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

var app = express();

app.use(function(req,res,next){
   console.log('첫 번째 미들웨어에서 요청을 처리함.') ;
    
 var userAgent = req.header('User-Agent');
 var paramName = req.query.name;
    
    res.writeHead('200',{'Content-Type':'text/html;charset=utf8'});
    res.write('<h1>Express 서버에서 응답한 결과입니다.</h1>');
    res.write('<div><p>User-Agent : '+userAgent+'</p></div>');
    res.write('<div><p>Param name : '+paramName+'</p></div>');
    res.end();
});



http.createServer(app).listen(3000,function(){
    console.log('Express 서버가 3000번 포트에서 시작됨.');
})

 

추가한 정보 설명
query 클라이언트에서 GET 방식으로 전송한 요청 파라미터를 확인합니다.
body 클라이언트에서 POST 방식으로 전송한 요청 파라미터를 확인합니다.
단, body-parser와 같은 외장 모듈을 사용해야 합니다.
예)req.body.name
header(name) 헤더를 확인합니다.

 

'For developer > Node.js' 카테고리의 다른 글

(Node.js)쿠키와 세션  (0) 2020.09.08
(Node.js)익스프레스로 웹 서버 만들기(2)  (0) 2020.09.08
(Node.js)서버관련  (0) 2020.09.07
(Node.js)파일처리 관련(1)  (0) 2020.09.06
(Node.js)클릭관련  (0) 2020.09.06
var http = require('http');

var server = http.createServer();

var port = 3000;

server.listen(port,function(){
    console.log('웹서버가 시작되었습니다. => %d',port);
});

http.createServer(); => 서버만듬

 

 

-createServer() 메소드로 만든 서버 객체에서 사용할 수 있는 대표적인 메소드-

 

listen(port,[hostname],[backlog],[callback]) => 서버를 실행하여 대기시킵니다.

close([callback]) => 서버를 종료합니다.

 

-클라이언트가 웹 서버에 요청할 때 발생하는 이벤트 처리하기-

 

connection -> 클라이언트가 접속하여 연결이 만들어질 때 발생하는 이벤트입니다.

request -> 클라이언트가 요청할 때 발생하는 이벤트

close -> 서버를 종료할 때 발생하는 이벤트입니다.

 

var http= require('http');

//웹 서버 객체를 만듭니다.
var server = http.createServer();

//웹 서버를 시작하여 3000번 포트에서 대기하도록 설정합니다.
var port = 3002;
server.listen(port,function(){
    console.log('웹 서버가 시작되었습니다. : %d',port);
});

//클라이언트 연결 이벤트 처리
server.on('connection',function(socket){
   var addr = socket.address();
    console.log('클라이언트가 접속했습니다. : %s, %d',addr.address,addr.port);
});

//클라이언트 요청 이벤트 처리
server.on('request',function(req,res){
   console.log('클라이언트 요청이 들어왔습니다.') ;
   console.dir(req);
});

//서버 종료 이벤트 처리
server.on('close',function(){
    console.log('서버가 종료됩니다.');
})

 

-request 관련 메소드-

 

writeHead(statusCode,[, statusMessage][,headers]) => 응답으로 보낼 헤더를 만듭니다.

 

write(chunk[, encoding][, callback]) => 응답 본문(body) 데이터를 만듭니다. 여러 번 호출될 수 있습니다.

 

end([data][, encoding][, callback]) => 클라이언트로 응답을 전송합니다. 파라미터에 데이터가 들어 있다면 이 데이터를 포함시켜 응답을 전송합니다. 클라이언트의 요청이 있을 때 한 번은 호출되어야 응답을 보내며, 콜백 함수가 지정되면 응답이 전송된 후 콜백 함수가 호출됩니다.

 

 

-서버에서 파일 처리-

 

-클라이언트에서 요청이 있을 때 파일 읽어 응답하기-

var http= require('http');
var fs = require('fs');

//웹 서버 객체를 만듭니다.
var server = http.createServer();

//웹 서버를 시작하여 3000번 포트에서 대기하도록 설정합니다.
var port = 3002;
server.listen(port,function(){
    console.log('웹 서버가 시작되었습니다. : %d',port);
});

//클라이언트 연결 이벤트 처리
server.on('connection',function(socket){
   var addr = socket.address();
    console.log('클라이언트가 접속했습니다. : %s, %d',addr.address,addr.port);
});

//클라이언트 요청 이벤트 처리
server.on('request',function(req,res){
   console.log('클라이언트 요청이 들어왔습니다.') ;
 
   var filename = 'house.png';
    fs.readFile(filename,function(err,data){
        res.writeHead(200,{"Content-Type": "image/png"});
        res.write(data);
        res.end();
    });
});

//서버 종료 이벤트 처리
server.on('close',function(){
    console.log('서버가 종료됩니다.');
});

 

-파일을 스트림으로 읽어 응답 보내기(pipe사용)-

var http= require('http');
var fs = require('fs');

//웹 서버 객체를 만듭니다.
var server = http.createServer();

//웹 서버를 시작하여 3000번 포트에서 대기하도록 설정합니다.
var port = 3002;
server.listen(port,function(){
    console.log('웹 서버가 시작되었습니다. : %d',port);
});

//클라이언트 연결 이벤트 처리
server.on('connection',function(socket){
   var addr = socket.address();
    console.log('클라이언트가 접속했습니다. : %s, %d',addr.address,addr.port);
});

//클라이언트 요청 이벤트 처리
server.on('request',function(req,res){
   console.log('클라이언트 요청이 들어왔습니다.') ;
 
   var filename = 'house.png';
   var infile = fs.createReadStream(filename,{flags:'r'});
    
    //파이프로 연결하여 알아서 처리하도록 설정하기
    infile.pipe(res);
});

//서버 종료 이벤트 처리
server.on('close',function(){
    console.log('서버가 종료됩니다.');
});

 

 

var fs = require('fs');

 

fs.메소드

 

readFile(filename,[encoding],[callback]) => 비동기식 IO로 파일을 읽어 들입니다.

 

readFileSync(filename,[encoding]) => 동기식 IO로 파일을 읽어 들입니다.

 

writeFile(filename,data,encoding='utf8',[callback]) => 비동기식 IO로 파일을 씁니다.

 

writeFileSync(filename,data,encoding='utf8') => 동기식 IO로 파일을 씁니다.

 

 

-파일 읽기 예제-

var fs = require('fs');

//파일을 동기식 IO로 읽어 들입니다.
var data = fs.readFileSync('./package.json','utf8');


//읽어 들인 데이터를 출력합니다.
console.log(data);

-파일 쓰기 예제-

var fs = require('fs');

//파일에 데이터를 씁니다.
fs.writeFile('./output.txt','Hello World!',function(err){
    if(err){
        console.log('Error : '+err);
    }
    
    console.log('output.txt 파일에 데이터 쓰기 완료.');
});

-파일을 직접 열고 닫으면서 읽거나 쓰기-

메소드 이름 설명
open(path,flags,[mode],[callback]) 파일을 엽니다.
read(fd,buffer,offset,length,position,[callback]) 지정한 부분의 파일 내용을 읽어 들입니다.
write(fd,buffer,offset,length,position,[callback]) 파일의 지정한 부분에 데이터를 씁니다.
close(fd,[callback]) 파일을 닫아 줍니다.

 

fs.write

var fs = require('fs');

//파일에 데이터를 씁니다.
fs.open('./output.txt','w',function(err,fd){
    console.log('1');
   if(err)  throw err;
    
    var buf = new Buffer('안녕\n');
    fs.write(fd,buf,0,buf.length,null,function(err,written,buffer){
        if(err) throw err;
        
        console.log(err,written,buffer);
        
        fs.close(fd,function(){
        console.log('파일 열고 데이터 쓰고 파일 닫기 완료');
        });
    });
});

순서 : open -> write -> close

 

-open작업시에 필요한 flag-

플래그 설명
r 읽기에 사용하는 플래그입니다. 파일이 없으면 예외가 발생합니다.
w 쓰기에 사용하는 플래그입니다. 파일이 없으면 만들어지고 파일이 있으면 이전 내용을 모두 삭제합니다.
w+ 읽기와 쓰기에 모두 사용하는 플래그입니다. 파일이 없으면 만들어지고 파일이 있으면 이전 내용을 모두 삭제합니다.
a+ 읽기와 추가에 모두 사용하는 플래그 입니다. 파일이 없으면 만들어지고 있으면 이전 내용에 새로운 내용을 추가합니다.

 

fs.read

var fs = require('fs');

//파일에서 데이터를 읽어 들입니다.
fs.open('./output.txt','r',function(err,fd){
   if(err) throw err;
    
    var buf = new Buffer(10);
    console.log('버퍼 타입 : %s'+Buffer.isBuffer(buf));
    
    fs.read(fd,buf,0,buf.length,null,function(err,byteRead,buffer){
        if(err) throw err;
        
        var inStr = buffer.toString('utf8',0,byteRead);
        console.log('파일에서 읽은 데이터 :%s',inStr);
        
        console.log(err,byteRead,buffer);
        
        fs.close(fd,function(){
           console.log('output.txt 파일을 열고 읽기 완료.') ;
        });
    });
});

 

-버퍼 복사 및 이어붙기-

//버퍼 객체를 크기만 지정하여 만든 후 문자열을 씁니다.
var output = '안녕 1!';
var buffer1 = new Buffer(10);
var len = buffer1.write(output, 'utf8');
console.log('첫 번째 버퍼의 문자열 : %s',buffer1.toString());

//버퍼 객체를 문자열을 이용해 만듭니다.
var buffer2 = new Buffer('안녕 2!','utf8');
console.log('두 번째 버퍼의 문자열 : %s',buffer2.toString());

//타입을 확인합니다.
console.log('버퍼 객체의 타입 : %s',Buffer.isBuffer(buffer1));

//버퍼 객체에 들어 있는 문자열 데이터를 문자열 변수로 만듭니다.
var byteLen = Buffer.byteLength(output);
var str1 = buffer1.toString('utf8',0,byteLen);
var str2 = buffer2.toString('utf8');

//첫 번째 버퍼 객체의 문자열을 두 번째 버퍼 객체로 복사합니다.
buffer1.copy(buffer2,0,0,len);
console.log('두 번째 버퍼에 복사한 후의 문자열: %s',buffer2.toString('utf8'));

//두 개의 버퍼를 붙여 줍니다.
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log('두 개의 버퍼를 붙인 후의 문자열 : %s',buffer3.toString('utf8'));

 

-스트림 단위로 파일 읽고 쓰기-

메소드 이름 설명
createReadStream(path,[options]) 파일을 읽기 위한 스트림 객체를 만듭니다.
createWriteStream(path,[options]) 파일을 쓰기 위한 스트림 객체를 만듭니다.

 

var fs = require('fs');

var infile = fs.createReadStream('./output.txt',{flags:'r'});
var outfile = fs.createWriteStream('./output2.txt',{flags:'w'});

infile.on('data',function(data){
   console.log('읽어 들인 데이터',data) ;
    outfile.write(data);
});

infile.on('end',function(){
    console.log('파일 읽기 종료.');
    outfile.end(function(){
        console.log('파일 쓰기 종료.');
    });
});

 

-pipe를 사용하여 기존파일 복사하기-

var fs = require('fs');

var inname = './output.txt';
var outname = './output2.txt';

fs.exists(outname,function(exists){
   if(exists) {
       fs.unlink(outname,function(err){
           if(err) throw err;
           console.log('기존파일 ['+outname+'] 삭제함.');
       });
   }
    var infile = fs.createReadStream(inname,{flags:'r'});
    var outfile = fs.createWriteStream(outname,{flags:'w'});
    infile.pipe(outfile);
    console.log('파일복사 ['+inname+'] ->['+outname+']');
});

 

붙혀넣을 파일이 존재한다면 unlink를 사용하여 삭제시킨후 그다음 단계 진행

 

-http 모듈로 요청받은 파일 내용을 읽고 응답하기-

var fs = require('fs');
var http = require('http');
var server = http.createServer(function(req,res){
   //파일을 읽어 응답 스트림과 pipe()로 연결합니다.
    var instream = fs.createReadStream('./output.txt');
    instream.pipe(res);
});

server.listen(7001,'127.0.0.1');

 

-fs 모듈로 새 디렉터리 만들고 삭제하기-

var fs = require('fs');
fs.mkdir('./docs',0666,function(err){
    if(err) throw err;
    console.log('새로운 docs 폴더를 만들었습니다.');
    
    fs.rmdir('./docs',function(err){
        if(err) throw err;
        console.log('docs 폴더를 삭제했습니다.');
    });
});

'For developer > Node.js' 카테고리의 다른 글

(Node.js)쿠키와 세션  (0) 2020.09.08
(Node.js)익스프레스로 웹 서버 만들기(2)  (0) 2020.09.08
(Node.js)익스프레스로 웹 서버 만들기(1)  (0) 2020.09.07
(Node.js)서버관련  (0) 2020.09.07
(Node.js)클릭관련  (0) 2020.09.06

on(event,listener) => 지정한 이벤트의 리스너를 추가합니다.

 

once(event,listener) => 지정한 이벤트의 리스너를 추가하지만 실행한 후에는 자동으로 리스너가 제거됩니다.

 

removeListener(event,listener) => 지정한 이벤트에 대한 리스너를 제거합니다.

 

 

<!-- 쪽지 보낼 때 받는 이메일이 멤버목록에 있는 지 조회하는 쿼리문(결과값이 0 일때 없는 멤버임) -->
	<select id='searchmember' resultType="integer">
		select count(*) from MANAGE_MEMBER where MEMBER_EMAIL = #{targetid}
	</select>

 

<script type="text/javascript">
   $('#check_id').click(function(){
		//var id = $('.receiver').val(); => 받는 사람의 이메일을 가져옴.
		
		$.ajax({
		    url:'check', //컨트롤러에 접근하는 url
		    type:'get', // 메소드(get, post, put 등)
		    data:{'id':id}, //보낼 데이터('키','값')
		    success: function(result) {
				//alert('아작스 통신성공');
				if(result==1){	//ajax 통신을 통해 멤버가 있으면 결과값은 1 이상 정수형으로 가져온다
					$('form').submit();	//유효 멤버인지 확인한 후 DB에 쪽지 삽입 후 화면 전횐
					 alert("정상적으로 전송되었습니다!");
				}else{//0이면 select count가 0 을 의미 즉,해당되는 멤버가 없기 때문에 유효하 지않다.
					alert("유효한 멤버가 아닙니다! 이메일을 확인해 주세요");
				}
		    },
		    error: function() {
				alert('아작스 통신실패');
		    }
		});

		
	 });
</script>

1.쪽지 보내기 버튼을 누르면 ajax통신을 시작하게 됨.

 

@Controller
public class LetterController {
	@Inject
	MessageServiceImpl service;
	@Autowired
	MessageDAOImpl daoim;
	@Autowired
	private LetterPage page;

	
	@RequestMapping("/check") @ResponseBody
	public int checkMember(@RequestParam("id") String id,Model model){
		System.out.println("check매핑에서의 id값 => "+id);
		
		int result = service.checkId(id);
		System.out.println("서비스임플후 => "+result);
		return result;
		
	}
}

2. Ajax로 전달받으면 id를 service.checkId(id)를 통하여 service로 보냄

 

 

@Override
		public int checkId(String id) {
			int resultId = sqlSession.selectOne("message.searchmember", id);
			return resultId;
		}

3.앞에서 전달받은 id를 sql mapper로 보내서 값을 전달받음 

 

<!-- 쪽지 보낼 때 받는 이메일이 멤버목록에 있는 지 조회하는 쿼리문(결과값이 0 일때 없는 멤버임) -->
	<select id='searchmember' resultType="integer">
		select count(*) from MANAGE_MEMBER where MEMBER_EMAIL = #{id}
	</select>

4. 받는 사람 메일이 DB멤버테이블에 있는지 조회,해당되는 멤버 이메일이 있으면 1을 반환, 없으면 0을 반환 

 

<script type="text/javascript">
   $('#check_id').click(function(){
		//var id = $('.receiver').val(); => 받는 사람의 이메일을 가져옴.
		
		$.ajax({
		    url:'check', //컨트롤러에 접근하는 url
		    type:'get', // 메소드(get, post, put 등)
		    data:{'id':id}, //보낼 데이터('키','값')
		    success: function(result) {
				//alert('아작스 통신성공');
				if(result==1){	//ajax 통신을 통해 멤버가 있으면 결과값은 1 이상 정수형으로 가져온다
					$('form').submit();	//유효 멤버인지 확인한 후 DB에 쪽지 삽입 후 화면 전횐
					 alert("정상적으로 전송되었습니다!");
				}else{//0이면 select count가 0 을 의미 즉,해당되는 멤버가 없기 때문에 유효하 지않다.
					alert("유효한 멤버가 아닙니다! 이메일을 확인해 주세요");
				}
		    },
		    error: function() {
				alert('아작스 통신실패');
		    }
		});

		
	 });
</script>

5. 값을 반환받은 Ajax에서는 result 가 1 즉, 유요한 멤버이면 form을 submit 하고 그렇지 않으면 Alert()창으로 사용자 한테 알림.

+ Recent posts