본문 바로가기

공부/Node.js

[Node.js] express로 웹 서버 만들기(사용자 리스트)

코드

 

여기까지가 거의 복습하는 구간인데 사용자의 리스트를 뽑아내는 걸 진행하였다. 아직 활용이 부족하긴한데 중요하다고 생각하는 /process/listuser 부분에 대해서 포스팅 하도록 하겠다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>사용자 리스트 테스트</title>
</head>
<body>
    <h1>사용자 리스트</h1>
    <br>
    <form method="post" action="/process/listuser">
        <table>
            <tr>
                <td><label>아래 [전송] 버튼을 누르세요.</label></td>
            </tr>
        </table>
        <input type="submit" value="전송" name="">
    </form>
</body>
</html>

 

일단은 HTML 코드이다. 이 때까지 사용했던 로그인이나 로그아웃이나 404나 여러가지 html 중 가장 간단하게 그냥 실행을 위해서 사용하는 코드이다.

 

router.route('/process/listuser').post(function(req, res){
    console.log('/process/listuser 호출됨.');
    
    if(database){
        UserModel.findAll(function(err, results){
            if(err){
                console.error('사용자 리스트 조회 중 오류 발생 : ' + err.stack);
                
                res.writeHead('200', {'Content-Type' : 'text/html; charset=utf8'});
                res.write('<h2>사용자 리스트 조회 중 오류 발생</h2>');
                res.write('<p>' + err.stack + '</p>');
                res.end();
                
                return;
            }
            
            if(results){
                console.dir(results);
                
                res.writeHead('200', {'Content-Type' : 'text/html; charset=utf8'});
                res.write('<h2>사용자 리스트</h2>');
                res.write('<div><ul>');
                
                for(var i = 0 ; i < results.length ; i++){
                    var curId = results[i]._doc.id;
                    var curName = results[i]._doc.name;
                    res.write('    <li>#' + i + ' : ' + curId + ', ' + curName + '</li>');
                }
                
                res.write('</ul></div>');
                res.end();
            } else {
                res.writeHead('200', {'Content-Type' : 'text/html; charset=utf8'});
                res.write('<h2>사용자 리스트 조회 실패</h2>');
                res.end();
            }
        });
    } else {
        res.writeHead('200', {'Content-Type' : 'text/html; charset=utf8'});
        res.write('<h2>데이터 베이스 연결 실패</h2>');
        res.end();
    }
});

 

/process/listuser 코드이다. 여기서 보면 findAll 함수는 미리 정의를 해둔 함수이다. _doc는 results라는 findAll에서 넘어온 데이터에서 파일을 탐색할 때 사용한다. 정확하게는 문서형 NoSQL인 MongoDB의 내부를 볼 때 사용한다고 보면 된다.

 

_doc를 순회시켜서 사용자리스트를 뽑아낸다.

 

       UserSchema.static('findById', function(id, callback){
            return this.find({id : id}, callback);
        });
        
        UserSchema.static('findAll', function(callback){
            return this.find({}, callback);
        });

 

이렇게 두 가지 함수를 미리 추가 시켜두었다. 위치는 UserSchema를 설정하는 connectDB에서 Schema를 미리 설정을하고 추가로 함수도 지정해주었다.(static은 전역 함수를 의미하는 것 같다.)

실행

 

 

일단 실험을 위해서 listuser.html로 실행을 했다. 여기서 전송 버튼을 누르면

 

 

이런식으로 사용자 리스트가 나오게 된다. 여기서 조금 더 나아가서 사용자를 추가 해보았다.

 

 

깨알 같은 회원가입을 추가 시켜 놓았다.

 

 

이렇게 사용자를 추가하면

 

 

listuser로 다시 돌아왔을 때 #4가 추가로 생성된 것을 볼 수 있다. 여기까지가 진행한 것을 정리한 것이다. 여기서 내가 자주적으로 뭔가 할 수 있는게 크게는 없지만 메인을 로그인으로 두고 로그인에서 회원가입, listuser 등을 통합 시키면 좋지 않을까?