NodeJS 插入PostgreSQL时出错

9wbgstp7  于 2023-01-01  发布在  Node.js
关注(0)|答案(1)|浏览(144)

Knex.js尝试插入到PostgreSQL时出现错误消息

const express = require("express");
const app = express();
const cors = require("cors");
const knex = require("./db/db");

 //middlewares
 app.use(cors());
 app.use(express.json());
 //routes
 //creating a task

 app.post("/task", async (req, res) => {
 const { name } = req.body;
 const newtask = await knex
  .raw("insert into todo (name) values ($1)", [name])
  .then(() => {
   knex
    .select()
    .from("todo")
    .then(() => {
      res.send(newtask.row);
     });
   });
 });

抛出新错误(Expected ${expectedBindings} bindings, saw ${index});^
错误:应为1个绑定,看到0

yhuiod9q

yhuiod9q1#

你几乎答对了。用一个问号(?)替换你的$1,knex会允许的。
还有--你把wait和.then结合起来的方式对我来说没有意义。为了澄清我会怎么做:

const newTask = await knex.raw(‘INSERT INTO todo (name) VALUES (?);’, [name]);
const allTasks = await knex.from(‘todo’).select();
res.send(allTasks);

另一种使用更好的knex语法实现此操作的简化方法是:

const newTask = await knex(‘todo’).insert({ name });
const allTasks = await knex(‘todo’).select();
res.send(allTasks);

请注意,响应对象不包含rows,除非它是一个原始查询。最后,在尝试解构name后,可能需要检查它是否确实存在--人们会尝试将最奇怪的东西发送到网上:)
祝你好运!

相关问题