【问题标题】:SyntaxError: Unexpected token ' in JSON at position 0SyntaxError: 位置 0 处 JSON 中的意外标记'
【发布时间】:2020-07-02 10:35:40
【问题描述】:
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const fs = require("fs");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());



// http://expressjs.com/en/starter/static-files.html
app.use(express.static("public"));

const dbFile = "./.data/sqlite.db";
const exists = fs.existsSync(dbFile);
const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database(dbFile);

db.serialize(() => {
  if (!exists) {
    db.run(
      "CREATE TABLE UserData (UserID INTEGER, Points INTEGER, Warnings INTEGER, Suspendions INTEGER, Blacklisted TEXT)"
    );
    console.log("New table UserData created!");

  }
});

app.post("/adduserdatacard", (request, response) => {
  console.log(`add to userdata ${request.body.userid}`);


  const userid = request.body.userid;
  const points = request.body.points;
  db.run(`INSERT INTO UserData (UserID,Points,Warnings,Suspendions,Blacklisted) VALUES (?,?,0,0,'false')`,userid, points, error => {
    if (error) {
      response.send({ message: "error" });
    } else {
      response.send({ message: "success" });
    }
  });
});

我很困惑,因为我的代码中没有 '。我正在通过 CURL 运行 API

curl -H "Content-Type: application/json" -X POST -d '{"UserID":1,"Points":1234}' http://lts-database.glitch.me

如果没有报价,为什么会告诉我这样的错误?我已经绑定了替换 JSON 周围的引号,然后它说无效的令牌 U。

【问题讨论】:

  • console.log 显示什么?

标签: node.js json bash express curl


【解决方案1】:

实际上,您传递给 post 端点的字符串中有一个 ' 单引号字符。

这是你传递的字符串

'{"UserID":1,"Points":1234}'

应该是

"{\"UserID\":1,\"Points\":1234}"

正如您所发现的,将 JSON 字符串放入像 curl 这样的 shell 命令中是一种众所周知的痛苦。您必须将它们用双引号括起来,然后转义其中的双引号。

您可能会发现这个问题很有帮助。 Store JSON directly in bash script with variables?

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 2017-12-24
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    相关资源
    最近更新 更多