본문 바로가기
웹 개발자 준비 과정🐳/스마트팩토리,MES 시스템 개발

Nodejs 와 MSSQL 연동하기

by @ENFJ 2022. 11. 16.
npx express-generator

npm install

npm install mssql

 

 

const config = {
    user:"로그인(L)",
    password:"암호",
    server:"서버이름",
    database:"데이터베이스 이름",
    options:{
        trustedconnection: true,
        enableArithAbort: true,
        instancename: "",
    },
    //port:
};

module.exports = config;

 

 

 

const config = {
    user:"로그인(L)",
    password:"암호",
    server:"서버이름",
    database:"데이터베이스 이름",
    options:{
        trustedconnection: true,
        enableArithAbort: true,
        instancename: "",
    },
    port:52931
};

module.exports = config;

 

그리고.. localhost:3000/testconnect 로 접속하면  터미널에 연결된다는 문구가 떠야한다.

하지만 아래 사진 처럼 Failed to connect to [DB 서버명]:port 가 출력.. 연결이 잘 안된다. 

그래서 구.글.링 을 해보았다.

 

아래 해결방법 중 하나씩 해보면서 에러를 고쳐보자.  (필자는 해결방법 3번으로 고침)


해결방법1 

처음에는 'sql server 구성 관리자' > sql server 서비스 > SQL server browser 의 상태가 중지됨 으로 되어있었다.

그래서 

우측 클릭을 해서 속성!

서비스 카테고리에서 시작모드를 '자동'으로 변경시켜준다.

 

그리고 다시 우측 클릭해서 '시작' 을 클릭해주면 위에 사진처럼 상태가 실행 중으로 변경되었음을 확인 할 수 있다.

 

다시 실행 했을때 터미널에 sql 연결이 안되었다고 뜬다면 아래 해결방법2 를 따라 해보자.


해결방법 2

그 중 mssql 쿼리작성을 통해 에러 수정 할 수 있는 방법이 보여서 시도를 해보았다.

USE master
Go
xp_readerrorlog 0,1, N'Server is listening on'
Go

 

하지만 이 쿼리문을 mssql 새쿼리창에서 실행시 오류가 발생하였고 해당 오류를 또 구글링 해보니

권한 설정에 대한 쿼리문을 실행시키라고 하였다.(원인이 public 권한의 계정이 system 스키마 실행 권한이 없어서)

하지만 그 쿼리문 실행도 😑😑

 

use master
GO
GRANT EXECUTE ON sys.sp_OACreate TO public
GO

뭔가 점점.. nodejs 와 mssql 연동을 하는게 아닌 .. 안개속으로 빠져드는 것 같다..😖

<참고:https://github.com/tediousjs/node-mssql/issues/213>


해결방법 3 [저는 이 방법으로 해결했습니다.]😀

위에서 dbconfig.js 파일을 만들때,,, options 에 encrypt:false 를 추가해주었더니 실행이 되었다.

+SSL 옵션을 비활성화하기 위해 연결 문자열 을 강제 encrypt=false

 

또한 추가적으로 port : 1433 이라고 되어있는데

sqlserver 구성관리자 > sql server네트워크 구성 > sqlexpress에 대한 프로토콜>  tcp/ip > ip주소 탭 > 

맨밑으로 스크롤 내리면 위에 사진처럼 ipall 에 TCP 포트 값을 넣어주면 된다. (TCP 포트: 1433 값은 대부분 동일 한 것 같음)

 

 

dbconfig.js 전체 코드

const config = {
    user:"로그인(L)",
    password:"암호(P)",
    server:"서버이름(S)",
    database:"본인 테이블 명",
    options:{
        trustedconnection: true,
        enableArithAbort: true,
        instancename: "",
        encrypt:false
    },
    port:1433
    

};

module.exports = config;

결과