如何将此 POST 代码从 MySQL 重构为 PostgreSQL?
How to refactor this POST code from MySQL to PostgreSQL?
我有这个 todo_list 应用使用以下方法构建:
- Node.js
- Express.js
- EJS
- MySQL
按照此 Express 网站上的说明选择数据库:
https://expressjs.com/en/guide/database-integration.html#mysql
https://expressjs.com/en/guide/database-integration.html#postgresql
我设法让 MySQL 使用我的 todo_list 应用程序。但是我在重构相同的 CRUD (create) 代码以供 PostgreSQL 使用时遇到问题。下面是工作的 MySQL CRUD 代码和未完成的 PostgreSQL CRUD 代码以供比较。我做错了什么?
MySQL CRUD(创建)代码 = 有效!
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static("public"));
// _____________________________________________________________________________
// Add new list item - MySQL
let mysql = require('mysql');
let connection = mysql.createConnection({
host: 'localhost',
user: 'dbuser1',
password: '12345',
database: 'testdb1',
});
app.post("/", function(req, res) {
const itemName = req.body.newItem;
let data = { name: itemName };
let sql = "INSERT INTO `todo_list` SET ?";
let query = connection.query(sql, data, function(err, results) {
if (err) throw err;
res.redirect('/');
});
});
PostgreSQL CRUD(创建)代码 = 不起作用!
// .............................................................................
// Add new list item - PostgreSQL
// Loading and initializing the library without Initialization Options.
const pgp = require('pg-promise')();
const connection = {
user : 'pig1',
password : '12345',
host : 'localhost',
port : '5432',
database : 'todo_list'
};
// Database instance
const db = pgp(connection);
app.post("/", function(req, res) {
const itemName = req.body.newItem;
let data = { name: itemName };
let sql = "INSERT INTO todo_list SET ?";
db.any(sql, data)
.then(results => {
console.log(`Inserted data into database!`);
console.log('DATA:', results);
res.redirect('/');
})
.catch(error => {
console.log('ERROR:', error);
})
.finally(db.$pool.end);
});
多谢指点! @vitaly-t @rabhi-salim
我现在设法使 CRUD(创建)代码与 PostgreSQL 一起工作。
app.post("/", function(req, res) {
const itemName = req.body.newItem;
let data = { name: itemName };
async function askWhosebug() {
try {
await db.none('INSERT INTO todo_list(${this:name}) VALUES (${this:csv})', data);
// --- SUCCESS ---
console.log(``);
console.log(`Inserted data into database!`);
console.log(`DATA:`, insertedItem);
res.redirect('/');
} catch(error) {
// --- ERROR ---
console.log('ERROR:', error);
}
}
(async () => {
await askWhosebug();
})();
});
额外阅读material:
Promises、回调地狱、异步等待 (ES7)
https://www.digitalocean.com/community/tutorials/javascript-promises-for-dummies
https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#insert-with-result
我有这个 todo_list 应用使用以下方法构建:
- Node.js
- Express.js
- EJS
- MySQL
按照此 Express 网站上的说明选择数据库: https://expressjs.com/en/guide/database-integration.html#mysql https://expressjs.com/en/guide/database-integration.html#postgresql
我设法让 MySQL 使用我的 todo_list 应用程序。但是我在重构相同的 CRUD (create) 代码以供 PostgreSQL 使用时遇到问题。下面是工作的 MySQL CRUD 代码和未完成的 PostgreSQL CRUD 代码以供比较。我做错了什么?
MySQL CRUD(创建)代码 = 有效!
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static("public"));
// _____________________________________________________________________________
// Add new list item - MySQL
let mysql = require('mysql');
let connection = mysql.createConnection({
host: 'localhost',
user: 'dbuser1',
password: '12345',
database: 'testdb1',
});
app.post("/", function(req, res) {
const itemName = req.body.newItem;
let data = { name: itemName };
let sql = "INSERT INTO `todo_list` SET ?";
let query = connection.query(sql, data, function(err, results) {
if (err) throw err;
res.redirect('/');
});
});
PostgreSQL CRUD(创建)代码 = 不起作用!
// .............................................................................
// Add new list item - PostgreSQL
// Loading and initializing the library without Initialization Options.
const pgp = require('pg-promise')();
const connection = {
user : 'pig1',
password : '12345',
host : 'localhost',
port : '5432',
database : 'todo_list'
};
// Database instance
const db = pgp(connection);
app.post("/", function(req, res) {
const itemName = req.body.newItem;
let data = { name: itemName };
let sql = "INSERT INTO todo_list SET ?";
db.any(sql, data)
.then(results => {
console.log(`Inserted data into database!`);
console.log('DATA:', results);
res.redirect('/');
})
.catch(error => {
console.log('ERROR:', error);
})
.finally(db.$pool.end);
});
多谢指点! @vitaly-t @rabhi-salim
我现在设法使 CRUD(创建)代码与 PostgreSQL 一起工作。
app.post("/", function(req, res) {
const itemName = req.body.newItem;
let data = { name: itemName };
async function askWhosebug() {
try {
await db.none('INSERT INTO todo_list(${this:name}) VALUES (${this:csv})', data);
// --- SUCCESS ---
console.log(``);
console.log(`Inserted data into database!`);
console.log(`DATA:`, insertedItem);
res.redirect('/');
} catch(error) {
// --- ERROR ---
console.log('ERROR:', error);
}
}
(async () => {
await askWhosebug();
})();
});
额外阅读material:
Promises、回调地狱、异步等待 (ES7) https://www.digitalocean.com/community/tutorials/javascript-promises-for-dummies
https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#insert-with-result