标签: node-mysql

如果我们不关闭mysql节点js模块中的mysql连接,是否有任何问题

如果我们不在节点js中关闭或结束mysql连接,它是否会影响功能.

我这样做

var mysql      = require('mysql');
var connection = mysql.createConnection(...);

connection.query('SELECT 1', function(err, rows) {
  // connected! (unless `err` is set)
});
Run Code Online (Sandbox Code Playgroud)

我的代码中的任何地方都没有结束mysql连接.我的问题是是否有必要关闭mysql连接.如果我们不关闭mysql连接将来我将面临任何其他问题.

请帮助我对nodejs不熟悉

EDIT1 我不会遇到任何问题,如无法连接,太多连接打开等,意味着任何资源相关的问题?对.

EDIT2

如果我们不手动结束或使用结束函数,那么即时mysql连接将关闭?

mysql node.js node-mysql node-modules

5
推荐指数
1
解决办法
2473
查看次数

返回带有nodejs和node-mysql的行

我正在发现Nodejs和node-mysql模块.我有一个小问题.我找到的每个教程都解释了如何对数据库进行选择,但它们永远不会返回行,它们总是记录它们,这对我的情况来说绝对没用.

我有一个app.js文件:

// Get continents
app.get("/continents", function(request, result) {
    console.log("Continents : " + database.findAllContinents());
});
Run Code Online (Sandbox Code Playgroud)

和一个mysql.js文件:

exports.findAllContinents = function(connection) {
    var connection = getConnection();
    connection.query('select id, code, name from Continent', function (err, rows, fields) {
        if (err) {
            console.log("Error in findAllContinents : " + err)
        }
        return JSON.stringify(rows);
    });
    closeConnection(connection);
};
Run Code Online (Sandbox Code Playgroud)

如何让函数返回行以在app.js文件中使用它们?我真的不想在app.js文件中创建连接我想要分离DAO层.你有什么主意吗 ?

此外,如果有人知道使用node-mysql而不是ORM(sequelize,persistence.js ......)的优缺点

谢谢

select node.js node-mysql

5
推荐指数
1
解决办法
2万
查看次数

在Express REST API中使用OOP的最佳方式?

我全力以赴,仅使用节点做项目.它很有趣,但有时我会迷失一点,我想在我感到困惑的时候尝试获得理解,所以我正确地构建它并且不要太过于不知所措.无论如何,这是问题所在:

我有使用Express和mysql的REST API.我设置了mysql:

app.js

//Variables, move these to env
var dbOptions = {
    host: config.db_config.host,
    user: config.db_config.user,
    password: config.db_config.password,
    port: config.db_config.port,
    database: config.db_config.database
};
app.use(myConnection(mysql, dbOptions, 'single'));
Run Code Online (Sandbox Code Playgroud)

然后我包括我的路线,传递路线应用程序和登录中间件,以便我可以在路线中使用它们:

app.js cont.

var userRoute = require('./routes/users.js')(app,log);
app.use('/users', userRoute);
Run Code Online (Sandbox Code Playgroud)

这实际上有点令人困惑,但现在我明白了,我必须将它们传递给模块才能让模块获取数据.

然后在我的路径文件中,我想使用一个对象,以便我可以在其他路由中使用相同的功能,但在用户文件中,为了使用其他所有使用的相同连接池,或者至少不必设置再次连接我必须传递响应和请求?必须有一个更好的方法来做到这一点.这样真的很难看.这是相关部分

路线/ users.js

var User = require('../controllers/User.js');

module.exports = (function(app,log) {
var userR = express.Router();

userR.post('/register', function(req,res){
        var email = req.body.email;
        var password = req.body.password;
        var firstName = req.body.first_name;
        var lastName = req.body.last_name;
        var userId;

        try {
            var query;
            var status = 200; …
Run Code Online (Sandbox Code Playgroud)

oop rest node.js express node-mysql

5
推荐指数
1
解决办法
6421
查看次数

建议使用node-mysql在现有连接中更改数据库的方法

我试图在节点中的现有连接中更改数据库.连接可能有也可能没有createConnection调用数据库名称.这是代码:

var mysql = require('mysql');


connection = mysql.createConnection( {
    host               : 'localhost',
    user               : 'me',
    password           : 'secret',
    port               : 3306,
    /* database           : 'test' // optional */
});
Run Code Online (Sandbox Code Playgroud)

我正在使用node-mysql lib.目前我正在关闭连接并重新连接.

有没有更好的方法呢?类似于mysql_select_dbPHP?

node.js node-mysql

5
推荐指数
2
解决办法
3146
查看次数

更正node-mysql的UPDATE查询语法

我有一个数组'flag',我在我的函数中更改了该数组的值.现在我需要将其更新到数据库中,但我无法这样做.我已经在表格中有标志列.我不知道如何更新表中变量标志的值

如果我试试

connection.query('UPDATE visentry SET flag = "flag" ',  function(err,rows,fields) { }
Run Code Online (Sandbox Code Playgroud)

它使用值标志更新列标志.如果我尝试以下

    var sql = 'UPDATE visentry SET flag= ?';
   connection.query(sql,[{flag:flag}], function(err,rows,fields) { 
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误

错误:ER_PARSE_ERROR:您的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法

请给我任何建议

mysql node.js node-mysql

5
推荐指数
1
解决办法
2611
查看次数

如何将标签映射到标签同义词?

我正在建立一个用户将标签与帖子关联起来的系统,与SO不同.我有一个懒得实现标签同义词的地方.

这里我有一个名为Tags的表:

| TagName    |
|------------|
| Python     |
| JavaScript |
| Node       |
Run Code Online (Sandbox Code Playgroud)

我有另一个名为TagSynonyms:

| SynonymId | SourceTagName | TargetTagName |
|-----------|---------------|---------------|
| 1         | Py            | Python        |
| 2         | Python2       | Python        |
Run Code Online (Sandbox Code Playgroud)

服务器使用Node实现,用户以逗号分隔的字符串输入一些标签:

var input = 'Py,Flask'
var tags = request.tags.split(',');
Run Code Online (Sandbox Code Playgroud)

在这种情况下,用户输入了标签Py,根据TagSynonyms表,它应该映射到标签Python.第二个标签,Flask没有同义词,应该保持不变.

我设法使用命令式代码实现此功能:

tags.forEach(function (tag) {
  connection.query('SELECT TargetTagName FROM TagSynonyms WHERE SourceTagName = ?', tag, function(err, rows) {
    if (rows.length …
Run Code Online (Sandbox Code Playgroud)

javascript mysql sql node.js node-mysql

5
推荐指数
1
解决办法
74
查看次数

node-mysql连接结束或销毁无法正常工作

我不知道为什么mysql.end()或mysql.destroy()不能像我期望的那样工作.这是我的代码.

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    database: 'db',
    password: ''
});
connection.connect();
connection.query('SELECT * FROM ofertas ', function (err, rows, fields)
{
    if (err) console.log(err);
    else
    {
        console.log(rows);
    }

});
connection.destroy(function (err)
{
    if (err) throw err;
});
Run Code Online (Sandbox Code Playgroud)

我执行此代码,然后我转到mysql命令行,我输入:

show status like 'Conn%';
Run Code Online (Sandbox Code Playgroud)

在节点代码之前

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 3     |
+---------------+-------+
Run Code Online (Sandbox Code Playgroud)

节点代码之后

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 4     |
+---------------+-------+
Run Code Online (Sandbox Code Playgroud)

connection.state ='已断开' …

mysql node.js node-mysql

5
推荐指数
1
解决办法
2578
查看次数

node.js for循环中的mysql查询

我有两个问题.
首先,

SELECT auctions.name, wowitemdata.itemName, auctions.itemId, 
auctions.buyout, auctions.quantity
FROM auctions
INNER JOIN wowitemdata ON auctions.itemId = wowitemdata.itemID;
Run Code Online (Sandbox Code Playgroud)

返回这样的数据:

{
name: 'somename',
itemName: 'someitemname',
itemId: '0000',
buyout: '0001',
quantity: '5',
}
Run Code Online (Sandbox Code Playgroud)

第二个查询使用来自#1的数据来获得比itemId便宜的项目的count().响应将作为新元素添加到#1 - >'undercut'.

我的功能:

function checkUndercut(data, length){
    var Select = 'SELECT COUNT(auctions.itemId) AS cnt ';
    var From = 'From `auctions` ';
    var Where = 'WHERE auctions.itemId LIKE ? AND buyout < ?';
    var sql = Select + From + Where;
    for(i = 0, len = length; i < len; i++){ …
Run Code Online (Sandbox Code Playgroud)

javascript mysql node.js node-mysql

5
推荐指数
1
解决办法
1万
查看次数

节点Mysql On Duplicate Key Update仅更新唯一行

我正在使用MySQL 5.7Node JS 6.11.0,并且UNIQUE每当我插入冲突的行时我都会尝试更新MySQL列.但是,当我尝试插入冲突的记录时,只更新现有记录NULL而不会insert发生.这是我的代码

     pool.getConnection(function(err, connection) {
        var newClass = req.body;
        var query = `INSERT INTO classes SET ? ON DUPLICATE KEY UPDATE teacher_id = NULL`;

        connection.query(query, newClass, function(err, result) {   
            console.log(result);
            if(result.affectedRows >= 1) {
                res.status(201).end();
                res.json(result);
            }
        });
        connection.release();
    });`
Run Code Online (Sandbox Code Playgroud)

我必须为要插入的行运行两次查询; 第一次将冲突列设置为null,然后当我再次运行相同的查询时,将插入该行,因为没有冲突.

我已经生成了SQL并从MySql控制台直接运行它,我仍然需要为要插入的新行运行两次查询.我不明白为什么这样做.

Sql语句是

INSERT INTO classes SET `stream` = 'Red', `form` = '1', `teacher_id` = '7' ON DUPLICATE KEY UPDATE teacher_id = NULL
Run Code Online (Sandbox Code Playgroud)

我的创建表SQL是

| classes | …
Run Code Online (Sandbox Code Playgroud)

mysql node.js node-mysql

5
推荐指数
1
解决办法
4863
查看次数

getServerSideProps 和 mysql (RowDataPacket)

我想使用docs 中解释getServerSideProps方法使用 Next.js 进行服务器端渲染。

数据应该来自数据库,所以我使用的是mysql包。这会导致以下错误:

Error serializing `.assertions[0]` returned from `getServerSideProps` in "/assertion". Reason: `object` ("[object Object]") cannot be serialized as JSON. Please only return JSON serializable data types.
Run Code Online (Sandbox Code Playgroud)

我认为这是因为query方法 frommysql返回特殊对象 ( RowDataPacket)。getServerSideProps记录时我想传递给的结果如下所示:

[ RowDataPacket { id: 1, title: 'Test' } ]
Run Code Online (Sandbox Code Playgroud)

我可以通过包装结果来解决这个错误,JSON.parse(JSON.stringify(result))但这对我来说似乎很奇怪。

所以,我的简单的问题是:如何使用mysql.querygetServerSideProps是否正确?

或者这可能是一个应该解决的问题Next.js

谢谢

node-mysql next.js

5
推荐指数
1
解决办法
4185
查看次数

标签 统计

node-mysql ×10

node.js ×9

mysql ×6

javascript ×2

express ×1

next.js ×1

node-modules ×1

oop ×1

rest ×1

select ×1

sql ×1