Node.js가있는 MySQL


375

방금 Node.js를 시작했습니다. 나는 PHP 배경에서 왔으므로 모든 데이터베이스 요구에 MySQL을 사용하는 데 상당히 익숙합니다.

Node.js에서 MySQL을 어떻게 사용합니까?


5
무슨 일이 있었나요? 아래에 좋은 정보가 있습니다. 귀하의 경험을 듣고 싶습니다.
Landon

7
@Landon은 실제로 몇 가지 이유로 node-mysql과 함께갔습니다. 주로 상당히 활발한 개발 중이며 가장 널리 사용되는 것 같습니다. 나는 또한 그 multipleStatements기능을 정말로 좋아한다 .
crawf

@crawf PHP 또는 Node.js 중에서 무엇을 선호하십니까? 나는 PHP / MySQL에 뛰어 들었지만 구문이 JS 구문이라는 점을 고려하면 훨씬 자연스럽게 느껴지므로 노드로 전환하려고 생각합니다
oldboy

1
@Anthony 개인 취향 내가 생각하기에, 그것은 당신이 팀에 속해 있다면, 당신이 개발하고있는 생태계에 달려 있습니다. 백엔드 작업. Node에 갈 시간이 있고 실시간 웹 소켓을 위해 socket.io와 같은 것들을 제공 할 시간이 있다면 말하고 싶습니다.
crawf

답변:


426

node.js 모듈 목록을 확인하십시오

  • node-mysql — MySQL 프로토콜을 구현하는 node.js 모듈
  • node-mysql2 — 또 다른 순수한 JS 비동기 드라이버입니다. 파이프 라인, 준비된 진술.
  • node-mysql-libmysqlclient — libmysqlclient를 기반으로하는 MySQL 비동기 바인딩

node-mysql은 충분히 단순 해 보입니다.

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'example.org',
  user     : 'bob',
  password : 'secret',
});

connection.connect(function(err) {
  // connected! (unless `err` is set)
});

검색어 :

var post  = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
  // Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'

81
node-mysql의 +1은 실제로 준비된 명령문을 사용하지 않는 것보다 사용하기 도록합니다.
Kevin Laity

2
트랜잭션을위한 github.com/bminer/node-mysql-queues 및 node-mysql과 함께 사용하기위한 다중 명령문 지원.
BMiner

2
node-mysql의 경우 +1입니다. require자바 스크립트 라이브러리를 사용하는 것보다 더 좋은 방법
Alex K

4
@KevinLaity 나는 node-mysql이 아직 문장을 구현 하지 않았다는 인상을 받았다 . 문법은 비슷해 보인다 . 대신 현재로서는 특수 문자가 이스케이프 처리되고있는 것 같습니다.
funseiki

4
또한 연결 개체에 '데이터베이스'를 추가하여 데이터베이스 이름을 얻을 수 있습니다
felipekm

28

node-mysql 은 아마도 MySQL 데이터베이스 작업에 사용되는 최고의 모듈 중 하나 일 것입니다.


19

이것은 업데이트를 추가하는 오래된 스레드이므로 다음과 같습니다.

MySQL node.js 드라이버를 설치하려면

방금 실행하는 경우 npm install mysql서버를 실행하는 디렉토리와 동일한 디렉토리에 있어야합니다. 다음 예제 중 하나와 같이 수행하는 것이 좋습니다.

글로벌 설치의 경우 :

npm install -g mysql

로컬 설치의 경우 :

1- package.json의존성에 추가하십시오 :

"dependencies": {
    "mysql": "~2.3.2",
     ...

2 회 npm install


연결이 이루어 지려면 mysql 서버 (노드 독립형)도 실행해야합니다.

MySQL 서버를 설치하려면

이것을 설명하는 많은 튜토리얼이 있으며, 운영 체제에 따라 약간 다릅니다. Google로 이동하여을 검색하십시오 how to install mysql server [Ubuntu|MacOSX|Windows]. 그러나 한 문장으로 : http://www.mysql.com/downloads/ 로 이동하여 설치해야합니다.


2
npm install --save mysqlpackage.json자동으로 추가 됩니다
Xeoncross

10

다음은 도움이 될 수있는 생산 코드입니다.

Package.json

{
  "name": "node-mysql",
  "version": "0.0.1",
  "dependencies": {
    "express": "^4.10.6",
    "mysql": "^2.5.4"
  }
}

서버 파일입니다.

var express   =    require("express");
var mysql     =    require('mysql');
var app       =    express();

var pool      =    mysql.createPool({
    connectionLimit : 100, //important
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'address_book',
    debug    :  false
});

function handle_database(req,res) {

    pool.getConnection(function(err,connection){
        if (err) {
          connection.release();
          res.json({"code" : 100, "status" : "Error in connection database"});
          return;
        }   

        console.log('connected as id ' + connection.threadId);

        connection.query("select * from user",function(err,rows){
            connection.release();
            if(!err) {
                res.json(rows);
            }           
        });

        connection.on('error', function(err) {      
              res.json({"code" : 100, "status" : "Error in connection database"});
              return;     
        });
  });
}

app.get("/",function(req,res){-
        handle_database(req,res);
});

app.listen(3000);

참조 : https://codeforgeek.com/2015/01/nodejs-mysql-tutorial/


이 코드는 Cannot read property 'release' of undefined
망가진

3

KnexJ는 Node.JS와 브라우저 모두에서 SQL 쿼리 작성기로 사용할 수 있습니다. 사용하기 쉽다는 것을 알았습니다. 사용해 봅시다 -Knex.js

$ npm install knex --save
# Then add one of the following (adding a --save) flag:
$ npm install pg
$ npm install sqlite3
$ npm install mysql
$ npm install mysql2
$ npm install mariasql
$ npm install strong-oracle
$ npm install oracle
$ npm install mssql


var knex = require('knex')({
  client: 'mysql',
  connection: {
    host : '127.0.0.1',
    user : 'your_database_user',
    password : 'your_database_password',
    database : 'myapp_test'
  }
});

이렇게 사용할 수 있습니다

knex.select('*').from('users')

또는

knex('users').where({
  first_name: 'Test',
  last_name:  'User'
}).select('id')

3

이모, MySQL의 공식 Node.js 드라이버 인 MySQL Connector / Node.js를 사용해보십시오. 자세한 설명 은 ref-1ref-2 를 참조하십시오. here 에서 사용할 수있는 mysqljs / mysql을 시도했지만 이 라이브러리의 클래스, 메소드, 속성에 대한 자세한 문서를 찾지 못했습니다.

따라서 비동기 Promise 기반 클라이언트 라이브러리이고 좋은 문서를 제공 하므로 표준 MySQL Connector/Node.js으로 전환했습니다 . 다음 코드 스 니펫을 살펴보십시오.X DevAPI

const mysqlx = require('@mysql/xdevapi');
const rows = [];

mysqlx.getSession('mysqlx://localhost:33060')
.then(session => {
    const table = session.getSchema('testSchema').getTable('testTable');

    // The criteria is defined through the expression.
    return table.update().where('name = "bar"').set('age', 50)
        .execute()
        .then(() => {
            return table.select().orderBy('name ASC')
                .execute(row => rows.push(row));
        });
})
.then(() => {
    console.log(rows);
});

1

여러 데이터베이스 엔진에 공통 프레임 워크를 제공하기 위해 Node.js DB 라는 새로운 노력을 시도 할 수도 있습니다 . C ++로 빌드되므로 성능이 보장됩니다.

특히 Node.js MySQL 지원을 위해 db-mysql 드라이버를 사용할 수 있습니다 .


1
감사! 나는 그것도 갈 것이다.
crawf

4
node-db는 더 이상 지원되지 않으며 (8 개월 동안 비활성, 더 이상 사용되지 않는 node-waf 사용) 설치가 실패했습니다.
Yogu

18
"C ++로 빌드되었으므로 성능이 보장됩니다."-C ++을 사용한다고해서 성능이 보장되지는 않지만 여전히 올바르게 프로그래밍해야합니다.
developerbmw

node-db는 지원되지 않을뿐만 아니라 링크가 죽었습니다. 지금은 일종의 광고 사이트로 리디렉션됩니다. 다운 보팅.
nurdglaw

2
@Mariano, 링크 다운
Pacerier

0

라이브러리를 설치하여 mysql 데이터베이스를 연결하십시오. 안정적이고 사용하기 쉬운 node-mysql 모듈을 선택했습니다.

npm install mysql@2.0.0-alpha2

var http = require('http'),
   mysql = require('mysql');

var sqlInfo = {
   host: 'localhost',
   user: 'root',
   password: 'urpass',
   database: 'dbname'
}
client = mysql.createConnection(sqlInfo);

client.connect();

NodeJS mysql 연결 및 쿼리 예


2
내가 아는 한 알파 릴리스는 절대 '안정적'으로 간주되지 않습니다. 틀 렸으면 말해줘. 알파는 최종 단계로 가기 전에 API를 극적으로 변경하여 프로덕션 (및 개발) 코드에서 매우 원치 않는 가능성을 가지고 있습니다. 즉, 버전 번호가 semver.org 지침을 따르는 경우 입니다.
Robin van Baalen

1
"smart"따옴표 ( '')는 js 파일에서 그렇게 똑똑하지 않은 것으로 판명되었습니다.
글리프

데이터베이스 이름을 어디에 두어야하는지 보여주기 때문에이 의견이 마음
Boris Ivanov

0

당신은 등 ORM, 빌더를 생략하고 사용하여 DB / SQL 관리를 단순화 할 수 있습니다 sqlersqler-mdb.

-- create this file at: db/mdb/setup/create.database.sql
CREATE DATABASE IF NOT EXISTS sqlermysql
const conf = {
  "univ": {
    "db": {
      "mdb": {
        "host": "localhost",
        "username":"admin",
        "password": "mysqlpassword"
      }
    }
  },
  "db": {
    "dialects": {
      "mdb": "sqler-mdb"
    },
    "connections": [
      {
        "id": "mdb",
        "name": "mdb",
        "dir": "db/mdb",
        "service": "MySQL",
        "dialect": "mdb",
        "pool": {},
        "driverOptions": {
          "connection": {
            "multipleStatements": true
          }
        }
      }
    ]
  }
};

// create/initialize manager
const manager = new Manager(conf);
await manager.init();

// .sql file path is path to db function
const result = await manager.db.mdb.setup.create.database();

console.log('Result:', result);

// after we're done using the manager we should close it
process.on('SIGINT', async function sigintDB() {
  await manager.close();
  console.log('Manager has been closed');
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.