Do it 도서는 공대생의 영원한 친구인건 모두가 알 것이다.

국내 Flutter 서적이 많지 않아 걱정이었는데 가뭄의 단비 같은 도서이다.

 

좋은 점

1. 사진 위주의 설명

2. 플러터 장단점 소개

3. React Native와 Flutter 선택 고민 해결

 

안 좋은 점

1. 빌드 샘플 이미지가 Android Studio 예전버전이어서 그런지 시장과 맞지 않는다.

2. Xcode로 iOS 배포에 대한 설명을 추가로 했으면 좋겠다. 개발보다 배포가 힘듦....

 

이외에 국내 Flutter 서적 중 가장 좋다고 판단된다.

자사에 Java 개발자에게 물려 줄 생각

 

만약 서평단에 당첨되지 않았더라도 구매했을 것이다.

개발 환경 : windows 10, Adroid Studio 3.0.1, 갤럭시 노트 8(API 28, Android 9)

 

Tesseract는 구글에서 제공하는 문자 인식 관련 오픈소스입니다.

 

오픈소스이므로 직접 언어 데이터를 개선 및 발전에 직접 참여할 수 있습니다.

지속적으로 최신 버전이 출시되고 있습니다.

 

언어 데이터는 아래 링크에서 다운로드 가능합니다.

깃허브에서 배포 중입니다.

https://github.com/tesseract-ocr/tessdata

 

tesseract-ocr/tessdata

Contribute to tesseract-ocr/tessdata development by creating an account on GitHub.

github.com

 

먼저 안드로이드 프로젝트를 생성하고 Modul.app 단에 아래의 코드를 추가합니다.

dependencies {
	implementation 'com.rmtheis:tess-two:6.3.0'
}

만약 tess의 최신버진이 존재할 경우 이 보다 최신 버전의 코드를 작성해도됩니다.

 

이후 위 링크에서 언어 데이터를 다운로드합니다.

 

저는 kor(한글)과 eng(영어)를 다운로드 했습니다.

다운로드 이후 아래처럼 assets 폴더 아래에 tessdata 폴더 생성 후 방금 다운로드한 언어 데이터를 저장합니다.

 

이후 문자를 인식해 추출할 이미지를 res/drawable 폴더에 아래처럼 저장합니다.

저는 test.png에서 문자를 추출할 것입니다.

 

먼저 아래와 같은 전역변수를 선언합니다.

TessBaseAPI tess;
String dataPath = "";

 

이후 MainActivity에서 동작할 코드를 작성합니다.

먼저 onCreate에서 파일 체크 및 객체 초기화를 수행합니다. 이후 문자 인식을 진행합니다.

주석을 참고하면 됩니다.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

	// 데이터 경로
        dataPath = getFilesDir()+ "/tesseract/";
        
	// 한글 & 영어 데이터 체크
        checkFile(new File(dataPath + "tessdata/"), "kor");
        checkFile(new File(dataPath + "tessdata/"), "eng");

	// 문자 인식을 수행할 tess 객체 생성
        String lang = "kor+eng";
        tess = new TessBaseAPI();
        tess.init(dataPath, lang);

	//문자 인식 진행
        processImage(BitmapFactory.decodeResource(getResources(), R.drawable.test));
    }

 

 

이후 각 함수를 정의합니다.

// 문자 인식 및 결과 출력
public void processImage(Bitmap bitmap){
        Toast.makeText(getApplicationContext(), "이미지가 복잡할 경우 해석 시 많은 시간이 소요될 수도 있습니다.", Toast.LENGTH_LONG).show();
        String OCRresult = null;
        tess.setImage(bitmap);
        OCRresult = tess.getUTF8Text();
        TextView OCRTextView = (TextView) findViewById(R.id.tv_result);

        OCRTextView.setText(OCRresult);
    }

 

// 파일 복제 
private void copyFiles(String lang) {
        try {
            //location we want the file to be at
            String filepath = dataPath + "/tessdata/" + lang + ".traineddata";

            //get access to AssetManager
            AssetManager assetManager = getAssets();

            //open byte streams for reading/writing
            InputStream inStream = assetManager.open("tessdata/" + lang + ".traineddata");
            OutputStream outStream = new FileOutputStream(filepath);

            //copy the file to the location specified by filepath
            byte[] buffer = new byte[1024];
            int read;
            while ((read = inStream.read(buffer)) != -1) {
                outStream.write(buffer, 0, read);
            }
            outStream.flush();
            outStream.close();
            inStream.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

// 파일 존재 확인
private void checkFile(File dir, String lang) {
        //directory does not exist, but we can successfully create it
        if (!dir.exists()&& dir.mkdirs()){
            copyFiles(lang);
        }
        //The directory exists, but there is no data file in it
        if(dir.exists()) {
            String datafilePath = dataPath+ "/tessdata/" + lang + ".traineddata";
            File datafile = new File(datafilePath);
            if (!datafile.exists()) {
                copyFiles(lang);
            }
        }
    }

 

이제 프로그램을 실행하면 tess 객체에 의해 이미지에서 문자가 추출되고 TextView에 결과가 출력됩니다.

test.png

결과

영어의 인식률과 정확도는 굉장히 높은 편인 것을 볼 수 있습니다.

한글의 경우 인식률과 정확도가 영어에 비해 떨어집니다.

 

하지만 오픈소스이고 개선 참여 및 배포가 가능하니 OCR에 관심이 있는 분들은 아래 링크에서 개선에 참여해보세요.

https://github.com/tesseract-ocr/tesseract

 

tesseract-ocr/tesseract

Tesseract Open Source OCR Engine (main repository) - tesseract-ocr/tesseract

github.com

 

'IT > 안드로이드' 카테고리의 다른 글

안드로이드 팝업 알림  (1) 2017.09.22
안드로이드 동영상 배경화면 만들기  (2) 2017.07.17
안드로이드 ListView 클릭 안될 때  (3) 2017.07.14

코드

// Express 기본 모듈 불러오기

var express = require('express')

, http = require('http')

, path = require('path');

 

// Express의 미들웨어 불러오기

var bodyParser = require('body-parser')

, cookieParser = require('cookie-parser')

, static = require('serve-static')

, errorHandler = require('errorhandler');

 

// 에러 핸들러 모듈 사용

var expressErrorHandler = require('express-error-handler');

 

// Session 미들웨어 불러오기

var expressSession = require('express-session');

 

// 파일 업로드용 미들웨어

var multer = require('multer');

var fs = require('fs');

 

//클라이언트에서 ajax로 요청 시 CORS(다중 서버 접속) 지원

var cors = require('cors');

 

// mime 모듈

var mime = require('mime');



// 익스프레스 객체 생성

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())

 

// public 폴더와 uploads 폴더 오픈

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

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

 

// cookie-parser 설정

app.use(cookieParser());

 

// 세션 설정

app.use(expressSession({

    secret:'my key',

    resave:true,

    saveUninitialized:true

}));



//클라이언트에서 ajax로 요청 시 CORS(다중 서버 접속) 지원

app.use(cors());



//multer 미들웨어 사용 : 미들웨어 사용 순서 중요 body-parser -> multer -> router

// 파일 제한 : 10개, 1G

var storage = multer.diskStorage({

destination: function (req, file, callback) {

callback(null, 'uploads')

},

filename: function (req, file, callback) {

callback(null, file.originalname + Date.now())

}

});

 

var upload = multer({

storage: storage,

limits: {

        files: 10,

        fileSize: 1024 * 1024 * 1024

    }

});



// 라우터 사용하여 라우팅 함수 등록

var router = express.Router();



//파일 다운로드 패스에 대한 라우팅

router.route('/process/download').get(function(req, res) {

    console.log('/process/download 호출됨.');

    

    try {

        var paramFilepath = req.param('filepath');

        var filepath = __dirname + paramFilepath;

        var filename = path.basename(paramFilepath);

var mimetype = mime.lookup(paramFilepath);

        

        console.log('파일 패스 : ' + filepath);

        console.log('파일 이름 : ' + filename);

        console.log('MIME 타입 : ' + mimetype);

        

        // 파일 크기 확인

        var stats = fs.statSync(filepath);

        var fileSize = stats["size"];

        console.log('파일 크기 : ' + fileSize);

        

        // 클라이언트에 응답 전송

        res.setHeader('Content-disposition', 'attachment; filename=' + filename);

     res.setHeader('Content-type', mimetype);

     res.setHeader('Content-Length', fileSize);

    

     var filestream = fs.createReadStream(filepath);

     filestream.pipe(res);

    

    } catch(err) {

        console.dir(err.stack);

        

        res.writeHead('400', {'Content-Type':'text/html;charset=utf8'});

        res.write('<h3>파일 다운로드 실패</h3>');

        res.end();

    }   

        

});




// 파일 업로드 라우팅 함수 - 로그인 후 세션 저장함

router.route('/process/photo').post(upload.array('photo', 1), function(req, res) {

    console.log('/process/photo 호출됨.');

    

    try {

        var files = req.files;

    

console.dir('#===== 업로드된 첫번째 파일 정보 =====#')

console.dir(req.files[0]);

console.dir('#=====#')

 

        // 현재의 파일 정보를 저장할 변수 선언

        var originalname = '',

            filename = '',

            mimetype = '',

            size = 0;

        

        if (Array.isArray(files)) { // 배열에 들어가 있는 경우 (설정에서 1개의 파일도 배열에 넣게 했음)

     console.log("배열에 들어있는 파일 갯수 : %d", files.length);

    

     for (var index = 0; index < files.length; index++) {

         originalname = files[index].originalname;

         filename = files[index].filename;

         mimetype = files[index].mimetype;

         size = files[index].size;

     }

    

     } else { // 배열에 들어가 있지 않은 경우 (현재 설정에서는 해당 없음)

     console.log("파일 갯수 : 1 ");

    

         originalname = files[index].originalname;

         filename = files[index].name;

         mimetype = files[index].mimetype;

         size = files[index].size;

     }

        

        console.log('현재 파일 정보 : ' + originalname + ', ' + filename + ', '

                + mimetype + ', ' + size);

        

        // 클라이언트에 응답 전송

        res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});

        res.write('<h3>파일 업로드 성공</h3>');

        res.write('<hr/>');

        res.write('<p>원본 파일명 : ' + originalname + ' -> 저장 파일명 : ' + filename + '</p>');

        res.write('<p>MIME TYPE : ' + mimetype + '</p>');

        res.write('<p>파일 크기 : ' + size + '</p>');

        res.end();

        

    } catch(err) {

        console.dir(err.stack);

    }   

        

});

 

app.use('/', router);



// 404 에러 페이지 처리

var errorHandler = expressErrorHandler({

static: {

'404': './public/404.html'

}

});

 

app.use( expressErrorHandler.httpError(404) );

app.use( errorHandler );



// Express 서버 시작

var server = http.createServer(app).listen(app.get('port'), function(){

console.log('Express server listening on %s, %s', server.address().address, server.address().port);

});

로그

Express server listening on ::, 3000
/process/download 호출됨.
express deprecated req.param(name): Use req.params, req.body, or req.query instead app14.js:101:27
파일 패스 : C:\Users\nullc\Downloads\ExpressExample/downloads/house.png
파일 이름 : house.png
MIME 타입 : image/png
파일 크기 : 16833

 

설명 

 

아래 URL 호출 시 파일을 서버에서 다운로드하는 것이다.

http://localhost:3000/process/download?filepath=/downloads/house.png

 

파일 다운로드에 대한 라우터로 이러한 기능을 실행하는 것인데

특정 폴더에 있는 파일을 다운로드에 로컬에 저장할 수 있도록 해준다.

클라이언트에 대한 응답으로 파일을 전송한다.

'IT > Node JS' 카테고리의 다른 글

Node.js 파일 업로드 사용하기  (0) 2019.06.05
Node.js 세션 사용하기  (0) 2019.06.05
Node.js 쿠키 사용하기  (0) 2019.06.05
Node.js 에러 처리하기  (0) 2019.06.05
Node.js params 객체 사용하기  (0) 2019.06.05

코드

 

// Express 기본 모듈 불러오기

var express = require('express')

, http = require('http')

, path = require('path');

 

// Express의 미들웨어 불러오기

var bodyParser = require('body-parser')

, cookieParser = require('cookie-parser')

, static = require('serve-static')

, errorHandler = require('errorhandler');

 

// 에러 핸들러 모듈 사용

var expressErrorHandler = require('express-error-handler');

 

// Session 미들웨어 불러오기

var expressSession = require('express-session');

 

// 파일 업로드용 미들웨어

var multer = require('multer');

var fs = require('fs');

 

//클라이언트에서 ajax로 요청 시 CORS(다중 서버 접속) 지원

var cors = require('cors');



// 익스프레스 객체 생성

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())

 

// public 폴더와 uploads 폴더 오픈

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

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

 

// cookie-parser 설정

app.use(cookieParser());

 

// 세션 설정

app.use(expressSession({

  secret:'my key',

  resave:true,

  saveUninitialized:true

}));



//클라이언트에서 ajax로 요청 시 CORS(다중 서버 접속) 지원

app.use(cors());



//multer 미들웨어 사용 : 미들웨어 사용 순서 중요 body-parser -> multer -> router

// 파일 제한 : 10개, 1G

var storage = multer.diskStorage({

destination: function (req, file, callback) {

callback(null, 'uploads')

},

filename: function (req, file, callback) {

callback(null, file.originalname + Date.now())

}

});

 

var upload = multer({

storage: storage,

limits: {

    files: 10,

    fileSize: 1024 * 1024 * 1024

  }

});



// 라우터 사용하여 라우팅 함수 등록

var router = express.Router();

 

// 파일 업로드 라우팅 함수 - 로그인 후 세션 저장함

router.route('/process/photo').post(upload.array('photo', 1), function(req, res) {

  console.log('/process/photo 호출됨.');

  

  try {

    var files = req.files;

  

console.dir('#===== 업로드된 첫번째 파일 정보 =====#')

console.dir(req.files[0]);

console.dir('#=====#')

 

    // 현재의 파일 정보를 저장할 변수 선언

    var originalname = '',

      filename = '',

      mimetype = '',

      size = 0;

    

    if (Array.isArray(files)) { // 배열에 들어가 있는 경우 (설정에서 1개의 파일도 배열에 넣게 했음)

   console.log("배열에 들어있는 파일 갯수 : %d", files.length);

  

   for (var index = 0; index < files.length; index++) {

     originalname = files[index].originalname;

     filename = files[index].filename;

     mimetype = files[index].mimetype;

     size = files[index].size;

   }

  

   } else { // 배열에 들어가 있지 않은 경우 (현재 설정에서는 해당 없음)

   console.log("파일 갯수 : 1 ");

  

     originalname = files[index].originalname;

     filename = files[index].name;

     mimetype = files[index].mimetype;

     size = files[index].size;

   }

    

    console.log('현재 파일 정보 : ' + originalname + ', ' + filename + ', '

        + mimetype + ', ' + size);

    

    // 클라이언트에 응답 전송

    res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});

    res.write('<h3>파일 업로드 성공</h3>');

    res.write('<hr/>');

    res.write('<p>원본 파일명 : ' + originalname + ' -> 저장 파일명 : ' + filename + '</p>');

    res.write('<p>MIME TYPE : ' + mimetype + '</p>');

    res.write('<p>파일 크기 : ' + size + '</p>');

    res.end();

    

  } catch(err) {

    console.dir(err.stack);

  } 

    

});

 

app.use('/', router);



// 404 에러 페이지 처리

var errorHandler = expressErrorHandler({

static: {

'404': './public/404.html'

}

});

 

app.use( expressErrorHandler.httpError(404) );

app.use( errorHandler );



// Express 서버 시작

http.createServer(app).listen(app.get('port'), function(){

console.log('Express server listening on port ' + app.get('port'));

});

로그

 

C:\Program Files\nodejs\node.exe app.js

 

Express server listening on port 3000

/process/photo 호출됨. 
'#===== 업로드된 첫번째 파일 정보 =====#' 
{ fieldname: 'photo', 
  originalname: '11PNG', 
  encoding: '7bit', 
  mimetype: 'image/png', 
  destination: 'uploads', 
  filename: '11.PNG1559720229120', 
  path: 'uploads\\11.PNG1559720229120', 
  size: 456982 } 
'#=====#' 
배열에 들어있는 파일 갯수 : 1 
현재 파일 정보 : 11.PNG, 11.PNG1559720229120, image/png, 456982

설명 

파일을 서버에 업로드하는 것이다.

파일 업로드용 미들웨어인 multer 객체를 만들고

muter, fs로 업로드를 위한 준비를 한다.

이후 cors로 다중 서버 접속 지원 설정을 한다.

이를 통해 파일을 post 방식으로 전달받고 특정 폴더에 저장하는 것이다.

'IT > Node JS' 카테고리의 다른 글

Node.js 다운로드 사용하기  (0) 2019.06.05
Node.js 세션 사용하기  (0) 2019.06.05
Node.js 쿠키 사용하기  (0) 2019.06.05
Node.js 에러 처리하기  (0) 2019.06.05
Node.js params 객체 사용하기  (0) 2019.06.05

코드

 

// Express 기본 모듈 불러오기

var express = require('express')

, http = require('http')

, path = require('path');

 

// Express의 미들웨어 불러오기

var bodyParser = require('body-parser')

, cookieParser = require('cookie-parser')

, static = require('serve-static')

, errorHandler = require('errorhandler');

 

// 에러 핸들러 모듈 사용

var expressErrorHandler = require('express-error-handler');

 

// Session 미들웨어 불러오기

var expressSession = require('express-session');



// 익스프레스 객체 생성

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')));

 

// cookie-parser 설정

app.use(cookieParser());

 

// 세션 설정

app.use(expressSession({

  secret:'my key',

  resave:true,

  saveUninitialized:true

}));



// 라우터 사용하여 라우팅 함수 등록

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;

  

  if (req.session.user) {

    // 이미 로그인된 상태

    console.log('이미 로그인되어 상품 페이지로 이동합니다.');

    

    res.redirect('/public/product.html');

  } else {

    // 세션 저장

    req.session.user = {

      id: paramId,

      name: '소녀시대',

      authorized: true

    };

    

    res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});

    res.write('<h1>로그인 성공</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='/process/product'>상품 페이지로 이동하기</a>");

    res.end();

  }

});

 

// 로그아웃 라우팅 함수 - 로그아웃 후 세션 삭제함

router.route('/process/logout').get(function(req, res) {

  console.log('/process/logout 호출됨.');

  

  if (req.session.user) {

    // 로그인된 상태

    console.log('로그아웃합니다.');

    

    req.session.destroy(function(err) {

      if (err) {throw err;}

      

      console.log('세션을 삭제하고 로그아웃되었습니다.');

      res.redirect('/public/login2.html');

    });

  } else {

    // 로그인 안된 상태

    console.log('아직 로그인되어있지 않습니다.');

    

    res.redirect('/public/login2.html');

  }

});

 

// 상품정보 라우팅 함수

router.route('/process/product').get(function(req, res) {

  console.log('/process/product 호출됨.');

  

  if (req.session.user) {

    res.redirect('/public/product.html');

  } else {

    res.redirect('/public/login2.html');

  }

});

 

app.use('/', router);



// 404 에러 페이지 처리

var errorHandler = expressErrorHandler({

static: {

'404': './public/404.html'

}

});

 

app.use( expressErrorHandler.httpError(404) );

app.use( errorHandler );



// Express 서버 시작

http.createServer(app).listen(app.get('port'), function(){

console.log('Express server listening on port ' + app.get('port'));

});

로그

 

C:\Program Files\nodejs\node.exe app.js

 

Express server listening on port 3000
/process/login 호출됨.
/process/product 호출됨.

설명 

 

세션 존재 여부에 따라 페이지가 달라지는 프로그램이다.

최초 로그인 시 세션을 생성하고

이후에 세션 존재 시 상품 페이지로 즉시 이동, 로그아웃 버튼이 화면에 표시된다.

로그아웃 시 세션이 삭제된다.

'IT > Node JS' 카테고리의 다른 글

Node.js 다운로드 사용하기  (0) 2019.06.05
Node.js 파일 업로드 사용하기  (0) 2019.06.05
Node.js 쿠키 사용하기  (0) 2019.06.05
Node.js 에러 처리하기  (0) 2019.06.05
Node.js params 객체 사용하기  (0) 2019.06.05

코드

// Express 기본 모듈 불러오기

var express = require('express')

, http = require('http')

, path = require('path');

 

// Express의 미들웨어 불러오기

var bodyParser = require('body-parser')

, cookieParser = require('cookie-parser')

, static = require('serve-static')

, errorHandler = require('errorhandler');

 

// 에러 핸들러 모듈 사용

var expressErrorHandler = require('express-error-handler');



// 익스프레스 객체 생성

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')));

 

// cookie-parser 설정

app.use(cookieParser());



// 라우터 사용하여 라우팅 함수 등록

var router = express.Router();

 

router.route('/process/showCookie').get(function(req, res) {

  console.log('/process/showCookie 호출됨.');

 

  res.send(req.cookies);

});

 

router.route('/process/setUserCookie').get(function(req, res) {

  console.log('/process/setUserCookie 호출됨.');

 

  // 쿠키 설정

  res.cookie('user', {

    id: 'mike',

    name: '소녀시대',

    authorized: true

  });

  

  // redirect로 응답

  res.redirect('/process/showCookie');

});

 

app.use('/', router);



// 404 에러 페이지 처리

var errorHandler = expressErrorHandler({

static: {

'404': './public/404.html'

}

});

 

app.use( expressErrorHandler.httpError(404) );

app.use( errorHandler );



// Express 서버 시작

http.createServer(app).listen(app.get('port'), function(){

console.log('Express server listening on port ' + app.get('port'));

});

로그

 

 

 

C:\Program Files\nodejs\node.exe"

Express server listening on port 3000

/process/showCookie 호출됨.
/process/setUserCookie 호출됨.
/process/showCookie 호출됨.

 

설명 

 

 

 

http://localhost:3000/process/setUserCookie

 

위 URL 호출 시 아래의 결과가 나온다

 

serUserCookie 호출 시 쿠키에 JSON 객체를 삽입한 후 showCookie 페이지가 호출된다.

showCookie 페이지는 쿠키에 있는 JSON 객체를 파싱하고 결과를 화면에 뿌린다. 

 

{"user":{"id":"mike","name":"소녀시대","authorized":true}}

 

 

'IT > Node JS' 카테고리의 다른 글

Node.js 파일 업로드 사용하기  (0) 2019.06.05
Node.js 세션 사용하기  (0) 2019.06.05
Node.js 에러 처리하기  (0) 2019.06.05
Node.js params 객체 사용하기  (0) 2019.06.05
Node.js Post 방식 사용하기  (0) 2019.06.04

코드

// Express 기본 모듈 불러오기

var express = require('express')

, http = require('http')

, path = require('path');

 

// Express의 미들웨어 불러오기

var bodyParser = require('body-parser')

, static = require('serve-static')

, errorHandler = require('errorhandler');

 

// 에러 핸들러 모듈 사용

var expressErrorHandler = require('express-error-handler');

 

// 익스프레스 객체 생성

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.use('/', router);



// 등록되지 않은 패스에 대해 페이지 오류 응답

app.all('*', function(req, res) {

  res.status(404).send('<h1>ERROR - 페이지를 찾을 수 없습니다.</h1>');

});



// 404 에러 페이지 처리

var errorHandler = expressErrorHandler({

static: {

'404': './public/404.html'

}

});

 

app.use( expressErrorHandler.httpError(404) );

app.use( errorHandler );



// Express 서버 시작

http.createServer(app).listen(app.get('port'), function(){

console.log('Express server listening on port ' + app.get('port'));

});

로그

 

C:\Program Files\nodejs\node.exe app.js

 

3000Express server listening on port 3000

 

설명 

 

http://localhost:3000/ㅇㄹㄷ

 

위 코드 실행 이후 위처럼 존재하지 않는 주소 접속 시

var errorHandler = expressErrorHandler({

static: {

'404': './public/404.html'

}

});

 

위 코드에 의해 자동으로 404.html 페이지로 이동하게 됩니다.

핸들러를 등록해두면 에러 발생시 처리됩니다.

'IT > Node JS' 카테고리의 다른 글

Node.js 세션 사용하기  (0) 2019.06.05
Node.js 쿠키 사용하기  (0) 2019.06.05
Node.js params 객체 사용하기  (0) 2019.06.05
Node.js Post 방식 사용하기  (0) 2019.06.04
Node.js 헤더 정보 및 get 방식 사용하기  (0) 2019.06.04

코드

 

// 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/users/:id').get(function(req, res) {

  console.log('/process/users/:id 처리함.');

 

// URL 파라미터 확인

  var paramId = req.params.id;

  

  console.log('/process/users와 토큰 %s를 이용해 처리함.', paramId);

 

  res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});

  res.write('<h1>Express 서버에서 응답한 결과입니다.</h1>');

  res.write('<div><p>Param id : ' + paramId + '</p></div>');

  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'));

});

로그

 

C:\Program Files\nodejs\node.exe app.js

 

Express server listening on port 3000

/process/users/:id 처리함.
/process/users와 토큰 mike를 이용해 처리함.

설명 

 

http://localhost:3000/process/users/mike

위 URL 호출 시 아래의 결과가 나온다

mike가 :id에 매핑되기 때문에 이와 같은 결과가 나오는 것이다.

/process/users/:id로 인해 매핑이 이루어진다.

Express 서버에서 응답한 결과입니다.

Param id : mike

 

'IT > Node JS' 카테고리의 다른 글

Node.js 쿠키 사용하기  (0) 2019.06.05
Node.js 에러 처리하기  (0) 2019.06.05
Node.js Post 방식 사용하기  (0) 2019.06.04
Node.js 헤더 정보 및 get 방식 사용하기  (0) 2019.06.04
Node.js redirect 사용하기  (0) 2019.06.04

+ Recent posts