#javascript #mysql #node.js
#javascript #mysql #node.js
Вопрос:
- Я работаю с модулем MySQL nodejs для создания таблицы, которая будет создаваться автоматически каждый месяц, поэтому мне нужно проверить, продолжает ли
err.sqlMessage == Table 'tableName' already exists
because, если он существует, выполнять мой код, а если нет — он создаст новый с именем месяца и продолжит выполнение моего кода - Я использую переменную, которая будет автоматически обновляться
Date()
методом, поэтому, когда я пытаюсь сравнить синтаксис, он должен быть такимerr.sqlMessage == "Table '" varName "' already exists"
- но когда я пытаюсь сравнить таким образом, это выдает мне ошибку, я не знаю почему… кто-нибудь может мне помочь?
Вот мой код
const mysql = require('mysql');
const http = require("http");
var user = "test",
pass = "test",
server = "localhost";
//date var
var x = new Date(),
months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
//get year and month
m_y = "`"
months[x.getMonth()]
x.getFullYear()
"`",
//ready for connecting to the server
var serverCon = mysql.createConnection({
host: server,
user: user,
password: pass
});
var con = mysql.createConnection({
host: server,
user: user,
password: pass,
database: "accountantdb"
});
//check var
var q, w, e, r, t, y, u, i, o, p, a, s, d, f, g, h, j, k, l, z, x, c, v, b, n, m;
function createMonthTable() {
sql2 = `
CREATE TABLE ` m_y ` (
month_days VARCHAR(500) PRIMARY KEY NOT NULL
)`;
con.query(sql2, function (MT_ERR, MT_RES) {
if (MT_ERR == null) {
w = "table created successfully";
} else {
w = MT_ERR.sqlMessage;
}
if (w == "table created successfully" || w == "Table '" m_y "' already exists") {
w = "true";
//code here
} else {
throw w;
}
})
}
function connectToNewDB() {
con.connect(function (error) {
if (error) {
throw error
} else {
createMonthTable();
}
})
}
function createdb() {
sql1 = `
CREATE DATABASE accountantdb
`;
serverCon.query(sql1, function (create_ERR, createRES) {
if (create_ERR == null) {
q = "db created successfully"
} else {
q = create_ERR.sqlMessage;
}
if (q == "db created successfully" || q == "Can't create database 'accountantdb'; database exists") {
connectToNewDB();
} else {
throw q;
}
})
}
serverCon.connect(function (err) {
if (err) {
throw err;
} else {
//when connected - create a new db and connect to it
createdb();
}
});
http.createServer((req, res) => {
res.writeHead(200, {
"Content-Type": "text/html"
});
res.write(w);
res.end();
}).listen(8000, "hp-pc", function () {
console.log("server running on hp-pc:8000");
})
Ошибка раздела
function createMonthTable() {
sql2 = `
CREATE TABLE ` m_y ` (
month_days VARCHAR(500) PRIMARY KEY NOT NULL
)`;
con.query(sql2, function (MT_ERR, MT_RES) {
if (MT_ERR == null) {
w = "table created successfully";
} else {
w = MT_ERR.sqlMessage;
}
if (w == "table created successfully" || w == "Table '" m_y "' already exists") {
w = "true";
//code here
} else {
throw w;
}
})
}
Ответ №1:
1- вы должны были заменить УДАРЕНИЕ GRAVE на то, что вы уже добавили в область ограничения символов имени базы данных, на «»
2- преобразовать название месяца в нижний регистр, потому что sql уже преобразовал его в нижний регистр, затем сравните вашу строку
let str = String("Table '" m_y.replace(/`/ig,"").toLowerCase() "' already exists");
- код должен быть таким
function createMonthTable() {
sql2 = `
CREATE TABLE ` m_y ` (
month_days VARCHAR(500) PRIMARY KEY NOT NULL
)`;
con.query(sql2, function (MT_ERR, MT_RES) {
if (MT_ERR == null) {
w = "table created successfully";
} else {
w = MT_ERR.sqlMessage;
}
let str = String("Table '" m_y.replace(/`/ig,"").toLowerCase() "' already exists");
if (w == "table created successfully" || w == str) {
w = "true";
//code here
} else {
throw w;
}
})
}
- ответ создан для обучения