使用Node.js的MySQL

我刚刚开始接触Node.js。我来自PHP背景,所以我相当习惯使用MySQL来满足我的所有数据库需求。

我如何使用MySQL与Node.js?

315592 次浏览

检查Node.js模块列表

  • node-mysql -一个node.js模块,实现MySQL协议
  • node-mysql2 -另一个纯JS异步驱动程序。流水线,准备好的语句。
  • 基于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'

node-mysql可能是用于MySQL数据库的最好的模块之一,它是积极维护和良好的文档。

你也可以尝试一种名为node . js DB的新方法,它旨在为多个数据库引擎提供一个通用框架。它是用c++构建的,因此性能得到了保证。

具体来说,你可以为Node.js支持MySQL使用它的db-mysql驱动程序。

通过安装库连接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连接和查询示例 . sh

因为这是一个旧线程,只是添加了一个更新:

安装MySQL node.js驱动程序:

如果你只运行npm install mysql,你需要在同一个目录下运行你的服务器。我建议按照下面的例子来做:

全球安装:

npm install -g mysql

本地安装:

1-将它添加到依赖项中的package.json:

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

2-运行npm install


注意,为了建立连接,你还需要运行mysql服务器(它是独立于节点的)

安装MySQL服务器:

有很多教程解释了这一点,它有点依赖于操作系统。只要去谷歌并搜索how to install mysql server [Ubuntu|MacOSX|Windows]。但是一句话:你必须去http://www.mysql.com/downloads/并安装它。

以下是生产代码,可能会对您有所帮助。

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/

KnexJs可以在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')
在我看来,你应该试试MySQL Connector/Node.js,这是MySQL的官方Node.js驱动程序。 详细说明请参见ref-1ref-2。 我已经尝试了mysqljs/mysql,它是可用的在这里,但我没有找到这个库的类,方法,属性的详细文档 所以我用X DevAPI切换到标准的MySQL Connector/Node.js,因为它是一个异步基于承诺的客户端库,并提供了良好的文档。 看一下下面的代码片段:

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

你可以跳过ORM、构建器等,使用sqlersqler-mdb简化你的DB/SQL管理。

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