소개 : 이전 Nodejs Hello, World! 우리는 또한 다른 강력한 기능을 볼 수 있습니다. NodeJS 커뮤니티의 현재 인기와 많은 엔지니어의 지원으로 많은 수의 모듈이 점차 소개되었습니다.
내용 : 다음은 Nodejs와 MySQL 간의 상호 작용을 보여줍니다.
현재 MySQL 모듈을 Nodejs에 추가해야합니다. 현재 이전 장에서 언급 한 NPM (노드 패키지 관리자)이 활성화되었습니다.
mysql 모듈을 nodejs에 설치하십시오.
코드 사본은 다음과 같습니다.
$ npm MySQL을 설치하십시오
JS 스크립트 mysqltest.js
코드 사본은 다음과 같습니다.
// mysqltest.js
// mySQL 모듈을로드합니다
var client = require ( 'mysql'). 클라이언트,
client = new Client (),
// 생성 할 데이터베이스 이름입니다
test_database = 'nodejs_mysql_test',
// 생성 할 테이블 이름입니다
test_table = 'test';
// 사용자 이름
client.user = '루트';
//비밀번호
client.password = '루트';
// 연결을 만듭니다
client.connect ();
client.query ( '데이터베이스 만들기'+test_database, function (err) {
if (err && err.number! = client.error_db_create_exists) {
오류를 던지십시오.
}
});
// 콜백이 제공되지 않으면``error ''로 오류가 방출됩니다.
// 클라이언트의 이벤트
client.query ( '사용'+test_database);
client.query (
'테이블 만들기'+test_table+
'(id int (11) auto_increment,'+
'제목 바르 차 (255),'+
'텍스트 텍스트'+
'DateTime을 만들었습니다.'+
'기본 키 (ID))'
);
client.query (
''+test_table+''+에 삽입하십시오
'set title =?, text =?, created =?',
[ 'Super Cool', '이것은 좋은 텍스트입니다', '2010-08-16 10:00:23']
);
var query = client.query (
''+test_table+''+에 삽입하십시오
'set title =?, text =?, created =?',
[ '또 다른 항목', '2 개의 항목이 더 나은 테스트를 만들기 때문에', '2010-08-16 12:42:15']]
);
client.query (
'선택 *에서'+test_table,
함수 selectCB (err, results, fields) {
if (err) {
오류를 던지십시오.
}
Console.log (결과);
Console.log (필드);
client.end ();
}
);
스크립트를 실행하십시오
코드 사본은 다음과 같습니다.
노드 mysqltest.js
효과는 다음과 같습니다.
// mysql-demo.js
const mysql = require ( 'mysql2/promise'); // 약속을 지원하는 MySQL2를 사용합니다
요구 ( 'dotenv'). config (); // 환경 변수 관리
// 연결 풀을 사용하여 성능을 향상시킵니다
const pool = mysql.createpool ({{
호스트 : process.env.db_host || 'localhost',
사용자 : process.env.db_user || '뿌리',
비밀번호 : process.env.db_password || '뿌리',
데이터베이스 : process.env.db_name || 'nodejs_mysql_test',
WaitforConnections : True,
ConnectionLimit : 10,
queuelimit : 0
});
// 테이블 구조 정의 (DDL 관리)
const table_schema =`
게시물이없는 경우 테이블 작성 (게시물)
ID int 기본 키 auto_increment,
타이틀 Varchar (255) NOL NULL,
컨텐츠 텍스트,
create_at datetime default current_timestamp,
Update_at DateTime 업데이트 Current_timestamp
) Engine = innodb default charset = utf8mb4 collate = utf8mb4_unicode_ci;
`;;
// 비즈니스 로직 캡슐화
클래스 Postdao {
생성자 (풀) {
this.pool = 수영장;
}
비동기 초기화 () {
this.pool.execute (table_schema);
Console.log ( '테이블 확인/생성');
}
비동기 CreatePost (post) {
const [result] = this.pool.execute (
`게시물에 삽입 (제목, 콘텐츠)
값 (?,?)`,
[post.title, post.content]
);
반환 {... post, id : result.insertid};
}
Async getPosts (page = 1, pagesize = 10) {
const offset = (page -1) * pagesize;
const [rows] = this.pool.execute를 기다립니다.
`게시물에서 선택 *을 선택하십시오
create_at desc의 주문
한계 ? 오프셋?`,
[Pagesize, 오프셋]
);
반환 행;
}
Async TransactionDemo () {
const conn = this.pool.getConnection ();
노력하다 {
conn.begintransaction ()를 기다립니다.
// 트랜잭션 작업 1
conn.Execute를 기다립니다 (
`게시물에 삽입 (제목, 콘텐츠)
값 (?,?)`,
[ '트랜잭션 1', '원자 작전 데모']
);
// 트랜잭션 작업 2
const [result] = conn.execute를 기다립니다 (
`게시물 업데이트 내용 =?
여기서 제목 =?`,
[ '업데이트 된 컨텐츠', '거래 1']
);
conn.commit ()를 기다립니다.
반환 결과;
} catch (err) {
conn.rollback ()를 기다리고 있습니다.
오류를 던지십시오.
} 마지막으로 {
conn.release ();
}
}
}
// 실행 예
(async () => {
노력하다 {
const dao = 새로운 postdao (풀);
dao.initialize ();
// 새 기사를 만듭니다
const newpost = await dao.createpost ({
제목 : 'Modern Node.js MySQL 가이드',
내용 : '데이터베이스 운영을위한 모범 사례'
});
Console.log ( '생성 된 Post :', NewPost);
// Pagination Query
const posts = await dao.getposts ();
Console.log ( '첫 페이지 결과 :', 게시물);
// 트랜잭션 데모
const txresult = await dao.transactionDemo ();
console.log ( '트랜잭션 완료 :', txresult);
// 최종 쿼리
const finalposts = await dao.getposts ();
Console.log ( '최종 게시물 :', FinalPosts);
} catch (err) {
console.error ( '응용 프로그램 오류 :', err);
} 마지막으로 {
AWAIT PULL.END ();
}
}) ();