正在寻找有关 Nodejs 集群和连接到 mysql 服务器的方法的建议。我们是为每个子进程打开一个连接还是只为所有进程打开一个连接?还是我们为所有子进程创建一个连接池?推荐的方法是什么?
单节点进程
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'example.org',
user : 'bob',
password : 'secret'
});
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
Run Code Online (Sandbox Code Playgroud)
节点集群选项 1:
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) { …Run Code Online (Sandbox Code Playgroud) mysql 节点文档给出了如何转义和做简洁事情的示例。我无法弄清楚如何使用这种方法插入当前时间。
var post = {id: 1, createdDate: 'NOW()'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
});
// Error: ER_TRUNCATED_WRONG_VALUE: Incorrect datetime value: 'NOW()' for column 'createdDate' at row 1
Run Code Online (Sandbox Code Playgroud) 我正在查看 node-mysql 中的一些示例 https://github.com/felixge/node-mysql中的一些示例
我很困惑什么时候使用?和 ?作为构建查询时的占位符。
一个例子在这里;
var userId = 1;
var columns = ['username', 'email'];
var query = connection.query('SELECT ?? FROM ?? WHERE id = ?', [columns, 'users', userId], function(err, results) {
// ...
});
console.log(query.sql); // SELECT `username`, `email` FROM `users` WHERE id = 1
Run Code Online (Sandbox Code Playgroud)
我如何知道何时使用??以及何时使用??
哪个是最快的方法将查询获取到 MYSQL,然后返回到输出:
console.log('查询完成', 结果)"
有没有更好的方法?请解释你的答案!
谢谢!
方法一:
var connection = mysql.createConnection({multipleStatements: true});
connection.query('SELECT ?; SELECT ?', [1, 2], function(err, results) {
if (err) throw err;
console.log('queries done', results);
});
Run Code Online (Sandbox Code Playgroud)
方法二:
const Db = mysql.createPool({
connectionLimit: 7,
dateStrings: true,
multipleStatements: true
});
Db.getConnection(function(err, connection) {
if(err) console.log(err);
connection.query(`
SELECT "1" AS "first";
SELECT "2" AS "second";`, function(err, results) {
connection.release();
if(err) console.log(err);
console.log('queries done', results);
}
);
});
Run Code Online (Sandbox Code Playgroud)
方法三:
const Db = mysql.createPool({
connectionLimit: 7,
dateStrings: true,
multipleStatements: true
});
Db.getConnection(function(err, …Run Code Online (Sandbox Code Playgroud) 我使用nodejs并做出反应。
我经常收到此错误,有时不出现此错误消息,有时也会出现。
错误
返回 SafeBuffer.Buffer.from(json, 'utf8').toString('base64'); 类型错误:无法读取未定义的属性“来自”
我不知道为什么会这样。但据我所知,但是当我重新启动或运行服务器时,它花费的时间太长。这会影响吗?因为我在 mysql 连接上经历了同样的事情。因此我得到一个旧的 connectTimeOut 像这样:
import mysql from 'mysql';
var con = mysql.createConnection({
host:'localhost',
user:'root',
password:'',
database:'hammerst_hammer',
multipleStatements: true,
connectTimeout:30000
});
con.connect((err) =>{
if(err) throw err;
else console.log('MySql connected')
});
export default con;
Run Code Online (Sandbox Code Playgroud)
请帮助我,我不知道哪个错误以及该怎么办
我正在使用在einaros/ws上构建的节点ws服务器.该服务器必须向数据库发送查询.为此我正在使用felixge/node-mysql.
当用户连接到服务器时,应检查客户端是否仍存在于数据库中.
这是一段有趣的代码:
console.log("client-liste ist leer");
var query = "SELECT name FROM spieler WHERE name='"+id+"' AND passwort='"+passwort+"'";
var result = queryToDatabase(query);
console.log(getTime() + "DB-Result Abfrage: " + result);
Run Code Online (Sandbox Code Playgroud)
以及查询完成的代码:
var mysql = require('mysql');
var mysqlConnection = mysql.createConnection({
host: dbHost,
user: dbUser,
password: dbPassword,
});
function queryToDatabase(anfrage) {
mysqlConnection.connect();
mysqlConnection.query("USE " + db, function(err, rows, fields) {
if (err) throw err;
});
mysqlConnection.query(anfrage, function(err, rows, fields) {
if (err) throw err;
console.log("rows as String - …Run Code Online (Sandbox Code Playgroud) 我在node-mysql的教程部分运行代码,它给了我错误
码
var MySQLPool = require("mysql-pool").MySQLPool;
var pool = new MySQLPool({
poolSize: 4,
user: 'root',
password: 'root',
database: 'test'
});
pool.query("SELECT 'Hello, World!' AS hello", function(err, rows, fields) {
if(err) throw err;
console.log(rows[0].hello);
});
for(var i = 0; i < 10; ++i) {
pool.query("SELECT SLEEP(2), ? AS i", [i], function(err, rows, fields) {
if(err) throw err;
console.log("Slept: " + rows[0].i);
});
}
Run Code Online (Sandbox Code Playgroud)
错误:
/home/comapq/Works/Nodejs/Codes/node_modules/mysql-pool/lib/mysql-pool/pool.js:158 for(Client.prototype中的var key){^ TypeError:无法读取未定义的属性'prototype'新的MySQLPool上的MySQLPool._populate(/home/comapq/Works/Nodejs/Codes/node_modules/mysql-pool/lib/mysql-pool/pool.js:158:23)(/ home/comapq/Works/Nodejs/Codes/node_modules/mysql-pool/lib/mysql-pool/pool.js:44:7)在Object.(/home/comapq/Works/Nodejs/Codes/test-mysql-3.js:2:12)在Module._compile(module.js:449:26)的Object.Module._extensions..js(module.js) :467:10)在Module.load(module.js:356:32)的Function.Module._load(module.js:312:12)处于Module.runMain(module.js:492:10)的process.startup .processNextTick.process._tickCallback(node.js:244:9)
我来自一个主要是PHP/MySQL的背景,并且勉强进入node.js为我自己的测试和学习如何做事创建一个博客系统.我在这里遇到的问题是我似乎无法弄清楚如何进行正确的查询.我已经检查了node-mysql的文档但是还没有找到很多关于进行查询的信息.
如果我这样做,var posts = rows[0];我得到表的数组,它看起来不错,但我试图将特定字段传递给变量,但是当我执行下面的代码时,我得到了一堆"未指定"的.我知道这里有问题,我通常会mysql_fetch_array在PHP中做一个,但我不知道在node.js和node-mysql中执行此操作的方法.
connection.query('SELECT * FROM posts ORDER BY date', function(err, rows, fields) {
if (err) throw (err);
var post_date = rows[1];
var post_author = rows[2];
var post_content = rows[3];
console.log('Date: ', post_date);
console.log('Author: ', post_author);
console.log('Content: ', post_content);
});
Run Code Online (Sandbox Code Playgroud) 我有一个mysql查询,我试图与使用事务的node-mysql一起执行。它应该在连接对象上,但是我收到的错误消息说它没有begin transaction方法。
TypeError: conn.beginTransaction is not a function
这是交易代码:
dbutil.transaction(req.db,
function(done){
req.db.query('INSERT INTO answers (question, user, background, importance, comment) values (?, ?, ?, ?, ?)',
[question, user, background, concurrence, importance, comment], function (err, result){
console.log('result from insert query: ', result);
console.error('error: ', err);
done();
// req.db.query('INSERT INTO concurrenceAnswers (concurrence) values (?)',
// [concurrence], function (err, result){
// console.log('result form insert query: ', result);
// console.error('error: ', err);
// })
});
}, function(){}
);
Run Code Online (Sandbox Code Playgroud)
以及交易方式:
exports.transaction = function(conn, body, done) { …Run Code Online (Sandbox Code Playgroud) 我想编写一个包含NodeJS变量的SQL查询.当我这样做时,它给我一个'undefined'的错误.
我希望下面的SQL查询识别flightNo变量.如何将NodeJS变量输入到SQL查询中?它周围是否需要特殊字符$或者?.
app.get("/arrivals/:flightNo?", cors(), function(req,res){
var flightNo = req.params.flightNo;
connection.query("SELECT * FROM arrivals WHERE flight = 'flightNo'", function(err, rows, fields) {
Run Code Online (Sandbox Code Playgroud) node-mysql ×10
node.js ×10
javascript ×4
mysql ×4
async.js ×1
buffer ×1
return ×1
sql ×1
undefined ×1