MySQL с Node.js

382

Я только начал входить в Node.js. Я исхожу из фона PHP, поэтому я довольно часто использую MySQL для всех потребностей моей базы данных.

Как я могу использовать MySQL с Node.js?

  • 5
    с чем вы в итоге поехали? ниже приведена некоторая полезная информация, мне было бы интересно услышать
  • 7
    @Landon, на самом деле пошел с node-mysql по нескольким причинам, главным образом потому, что он находится в довольно активной разработке и, кажется, наиболее широко используется. Мне также очень нравится функция multipleStatements .
Показать ещё 2 комментария
Теги:

10 ответов

423
Лучший ответ

Просмотрите node.js список модулей

  • node-mysql - Модуль node.js, реализующий протокол MySQL
  • node-mysql2 - Еще один чистый JS-асинхронный драйвер. Конвейерная обработка, подготовленные заявления.
  • node-mysql-libmysqlclient - асинхронные привязки MySQL на основе libmysqlclient

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'
  • 80
    +1 для node-mysql фактически облегчает использование подготовленных операторов, чем не использует их
  • 2
    github.com/bminer/node-mysql-queues для транзакций и поддержка нескольких операторов для использования с node-mysql.
Показать ещё 12 комментариев
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 (который node независим)

Чтобы установить сервер MySQL:

Там есть куча учебников, которые объясняют это, и это немного зависит от операционной системы. Просто зайдите в Google и выполните поиск how to install mysql server [Ubuntu|MacOSX|Windows]. Но в предложении: вы должны пойти в http://www.mysql.com/downloads/ и установить его.

  • 2
    npm install --save mysql установит его и автоматически добавит в ваш package.json
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/

  • 0
    Этот код кажется испорченным .. много ошибок, включая Cannot read property 'release' of undefined
3

Шаг I. (Игнорировать, если это уже сделано)

mkdir your_folder
cd your_folder
npm install mysql

Создать таблицу

CREATE TABLE employees (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(50),
  location varchar(50),
  PRIMARY KEY (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

INSERT INTO employees (id, name, location) VALUES
(1, 'Jasmine', 'Australia'),
(2, 'Jay', 'India'),
(3, 'Jim', 'Germany'),
(4, 'Lesley', 'Scotland');

В вашем приложении app.js или whaterver_you_create.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var mysql = require("mysql");

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});


// create connection

var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "password",
  database: "databasename"
});

con.connect(function(err){
  if(err){
    console.log('Error connecting to Db');
    return;
  }
  console.log('Connection established');
});

con.query('SELECT * FROM employees',function(err,rows){
  if(err) throw err;

  console.log('Data received from Db:\n');
  for (var i = 0; i < rows.length; i++) {
    console.log(rows[i].name);
  };
  console.log(rows);
});

var employee = { name: 'pankaj', location: 'india' };
con.query('INSERT INTO employees SET ?', employee, function(err,res){
  if(err) throw err;

  console.log('Last insert ID:', res.insertId);
});

con.query(
  'UPDATE employees SET location = ? Where ID = ?',
  ["South Africa", 5],
  function (err, result) {
    if (err) throw err;

    console.log('Changed ' + result.changedRows + ' rows');
  }
);

con.query(
  'DELETE FROM employees WHERE id = ?',
  [5],
  function (err, result) {
    if (err) throw err;

    console.log('Deleted ' + result.affectedRows + ' rows');
  }
);



con.end(function(err) {
  // The connection is terminated gracefully
  // Ensures all previously enqueued queries are still
  // before sending a COM_QUIT packet to the MySQL server.
});
// end


module.exports = app;
2

KnexJs может использоваться как построитель запросов SQL как в Node.JS, так и в браузере. Я нахожу его простым в использовании. Попробуем - 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')
2

Вы также можете попробовать более новое усилие, известное как Node.js DB, целью которого является предоставление общей структуры для нескольких движков базы данных. Он построен на С++, поэтому гарантируется производительность.

В частности, вы можете использовать его драйвер db-mysql для Node.js Поддержка MySQL.

  • 1
    Спасибо! Я тоже попробую.
  • 4
    node-db больше не поддерживается (неактивен в течение 8 месяцев, использует устаревший node-waf), и установка не удалась для меня.
Показать ещё 5 комментариев
0

Imo, вы должны попробовать MySQL Connector/Node.js, который является официальным драйвером Node.js для MySQL. Смотрите ref-1 и ref-2 для подробного объяснения. Я пробовал mysqljs/mysql, который доступен здесь, но я не нахожу подробную документацию по классам, методам, свойствам этой библиотеки.

Поэтому я перешел на стандартный MySQL Connector/Node.js с X DevAPI, поскольку это асинхронная клиентская библиотека на основе Promise и предоставляет хорошую документацию. Взгляните на следующий фрагмент кода:

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);
});
0

подключите базу данных mysql, установив библиотеку. здесь был выбран стабильный и простой в использовании модуль node -mysql.

npm install [email protected]

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
    Насколько я знаю, альфа-релизы никогда не следует рассматривать как «стабильные». Поправьте меня если я ошибаюсь. У Alpha есть возможность кардинально изменить свой API, прежде чем переходить к финальному, что крайне нежелательно в производственном (и даже в разработке) коде. То есть, если нумерация версий соответствует рекомендациям semver.org .
  • 1
    «умные» кавычки ('') оказываются не такими уж умными в js-файлах.
Показать ещё 1 комментарий
-2
var express = require('express');
var router = express.Router();

/* GET home page. */

var mysql = require('mysql');
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "****",
    database: "nodejs"
});

con.connect(function(err) {
    if (err) throw err;
    console.log("Connected!");
});
module.exports = con;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню