【问题标题】:Why is this POST method not inserting data in my Postgres database in Node?为什么这个 POST 方法没有在 Node 的 Postgres 数据库中插入数据?
【发布时间】:2020-07-19 00:58:42
【问题描述】:

编辑:这是我收到的错误:

C:\Users\przyb\Desktop\lister\puupy\server.js:33
                if (err) throw err;
                         ^

error: missing FROM-clause entry for table "body"
    at Parser.parseErrorMessage (C:\Users\przyb\Desktop\lister\puupy\node_modules\pg-protocol\dist\parser.js:241:15)
    at Parser.handlePacket (C:\Users\przyb\Desktop\lister\puupy\node_modules\pg-protocol\dist\parser.js:89:29)
    at Parser.parse (C:\Users\przyb\Desktop\lister\puupy\node_modules\pg-protocol\dist\parser.js:41:38)
    at Socket.stream.on (C:\Users\przyb\Desktop\lister\puupy\node_modules\pg-protocol\dist\index.js:8:42)
    at Socket.emit (events.js:189:13)
    at addChunk (_stream_readable.js:284:12)
    at readableAddChunk (_stream_readable.js:265:11)
    at Socket.Readable.push (_stream_readable.js:220:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! puupy@1.0.0 start: `node server.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the puupy@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\przyb\AppData\Roaming\npm-cache\_logs\2020-07-19T01_30_59_800Z-debug.log

我正在尝试使用 HTML 表单和服务器端节点将数据插入到我的 postgres 数据库中的表中。这是表格:

<form action="/" method="POST">
            <input id="Name" type="text" max="100" value="Doggy" name="name">
            <input id="query" type="submit" value="Submit">

连接数据库的代码:

const Pool = require("pg").Pool;

const pool = new Pool({
    user:"postgres",
    host:"localhost",
    database:"puppy",
    password:"Bolek_3003",
    port:5432
});

这就是我尝试实际插入数据的方式:

var bodyParser = require("body-parser");
var urlencodedParser = bodyParser.urlencoded({extended: false});

app.post('/', urlencodedParser, function(req,res,next){
    pool.query("INSERT INTO Users VALUES(null, req.body.name)",(err,res)=>{
        if (err) throw err;
        console.log(err,res)
    });
    pool.end()
}); 

我不知道如何将这些数据实际接受到数据库中,提前致谢。

【问题讨论】:

  • 你有什么错误吗?
  • 我收到了错误error: missing FROM-clause entry for table "body",但我不知道这是什么意思
  • 试试这个看看它是否有效 var name= req.body.name ,const query = {text: 'INSERT INTO Users(column1, column2) VALUES($1, $2)', values: [null , ${name}]} pool.query(query,(err,res)=>{...//}) 名称部分在反引号之间
  • 我试过那个方法,我收到了这个错误:error: bind message supplies 2 parameters, but prepared statement "" requires 1。 @Sven.hig
  • 我已经发布了一个答案,看看它是否适合你

标签: javascript html node.js postgresql forms


【解决方案1】:

我认为请求的格式有误

const query = {
text: 'INSERT INTO Users(column1, column2) VALUES($1, $2)',
  values: [null, `${req.body,name}`],
}
pool.query(query,(err,res)=>{...//})

或者这个

const query = 'INSERT INTO Users(column1, column2) VALUES($1, $2)',
values= [null, `${req.body,name}`]
}
pool.query(query,values,(err,res)=>{...//})

【讨论】:

  • 从数组中移除 null 并使用反引号 " ` " " " around both ${req.body.name}` 和 ${req.body.number}
  • 不幸的是,这个建议对我不起作用。我先这样尝试:const query = {text: 'INSERT INTO Users(col1) VALUES ($1)', values: [null,`${req.body.name}`],} pool.query(query,(err,res)=&gt;{...}); pool.end();,但这导致了错误:error: bind message supplies 2 parameters, but prepared statement "" requires 1.。然后我也尝试了const query = {text: 'INSERT INTO Users(col1,col2) VALUES ($1,)', values: [null,`${req.body.name}`,`${req.body.number]`,} pool.query(query,(err,res)=&gt;{...}); pool.end();
  • 这部分` VALUES ($1,$2) ` 指定要传递的值的数量,然后将 2 个值传递给数组` [${req.body.name},${req.body.number]] ` 你的数组 if很好,只需从中删除 null
  • 好的,我按照您的指示正确插入了数据,非常感谢您的宝贵时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 2022-01-06
  • 2016-03-08
  • 2013-06-22
相关资源
最近更新 更多