我試圖將函式分離到另一個檔案,因為函式從 mysql 資料庫中獲取資料。
這是db.js
const mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "sample"
});
con.connect()
module.exports = function(query) {
con.query(query, function (err, result) {
if (err){
console.log(err);
} else{
console.log(result)
return result
}
});
};
這是main.js
const express = require('express')
const db = require('./db')
const app = express()
app.get('/test', function(req, res){
var sql = "SELECT id FROM user"
console.log(db(sql))
res.send(db(sql))
});
進入未定義main.js。console.log(db(sql))
但在db.js我console.log(result)得到的價值觀是:
[
RowDataPacket { id: 1 },
RowDataPacket { id: 2 },
RowDataPacket { id: 3 }
]
為什么我進入undefinedmain.js?這個問題有什么解決辦法嗎?
uj5u.com熱心網友回復:
由于您使用的是回呼函式,因此您不能直接從中回傳值。你有 2 個選項可以做你想做的事。
- 承諾
- 異步/等待(需要 mysql2 模塊)
嘗試這個,
查詢
function(query) {
return new Promise((resolve, reject) =>{
try{
con.query(query, function (err, result) {
if (err){
return reject(err)
}
return resolve(result)
});
}
catch(e){
reject(e)
}
})
};
主要的
app.get('/test', async function(req, res){
var sql = "SELECT id FROM user"
try{
const userId = await db(sql)
return res.send({
success: true,
result: {
userId
}
})
}
catch(e){
console.error(e)
return res.status(500).send({
success: false,
message: 'internal server error'
})
}
})
還有一件事,如果你有充分的理由自己撰寫查詢,你可以使用 knex 來簡化它(https://www.npmjs.com/package/knex),它是一個查詢構建器,意味著什么都不做做資料庫連接。
uj5u.com熱心網友回復:
解決方案
嘗試使用mysql2進行異步/等待
不要選擇mysql2/primse,因為當您的資料庫在云中或部署在 Heroku 提供的 clearDB 插件之類的地方時,它會導致意外錯誤
請按照以下步驟操作...分別為您的資料庫連接創建組態檔
import mysql from 'mysql2'
let db = mysql.createPool({
host: 'your host name',
user: "your username",
password: "your password",
database: "your database name",
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
})
export { db }
像我正在做的那樣執行查詢
import {db} from 'where you defined the above db config'
app.get('/test', async function(req, res){
const promise= db.promise()
var sql = "SELECT id FROM user"
const [rows,field] = awiat promise.execute(sql)
res.send(rows)
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432984.html
