如何将此 POST 代码从 MySQL 重构为 PostgreSQL?

How to refactor this POST code from MySQL to PostgreSQL?

我有这个 todo_list 应用使用以下方法构建:

按照此 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

https://www.npmjs.com/package/pg-promise#named-parameters