You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Express+Node+PostgreSQL Todo应用,Postman POST报'-'附近语法错误

解决PostgreSQL中syntax error at or near "-"的问题

你遇到的错误是因为PostgreSQL不允许直接使用带连字符-的表名——它会把todo-list解析成todo减list的运算,直接触发语法错误。以下是两种解决方法:

方法1:给表名添加双引号

修改index.js中的SQL语句,将todo-list用双引号包裹,明确告诉PostgreSQL这是一个完整的表名:

// POST路由修改后
app.post("/todos", async (req, res) => {
    try {
        const { description } = req.body
        const newTodo = await pool.query(
            `INSERT INTO "todo-list" (description) VALUES($1) RETURNING *`,
            [description]
        );
        res.json(newTodo.rows[0])
    } catch (err) {
        console.error(err.message)
    }
})

// GET路由修改后
app.get("/todos", async (req, res) => {
    try {
        const allTodos = await pool.query('SELECT * FROM "todo-list"')
        res.json(allTodos.rows)
    } catch (err) {
        console.log(err.message)
    }
})

方法2:修改表名为下划线命名(推荐)

更符合SQL命名规范的做法是将表名改为todo_list(用下划线代替连字符),这样无需额外添加引号,代码可读性更强:

// POST路由修改后
app.post("/todos", async (req, res) => {
    try {
        const { description } = req.body
        const newTodo = await pool.query(
            `INSERT INTO todo_list (description) VALUES($1) RETURNING *`,
            [description]
        );
        res.json(newTodo.rows[0])
    } catch (err) {
        console.error(err.message)
    }
})

// GET路由修改后
app.get("/todos", async (req, res) => {
    try {
        const allTodos = await pool.query("SELECT * FROM todo_list")
        res.json(allTodos.rows)
    } catch (err) {
        console.log(err.message)
    }
})

注意:如果选择修改表名,需要同步在PostgreSQL中修改对应的表名称。

原始代码参考

//db.js

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

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

module.exports = pool

//.env

DATABASE_URL=postgres://postgres:password@localhost:5432/crud

报错截图

内容的提问来源于stack exchange,提问作者Denyyel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:00:12