【问题标题】:SyntaxError: unexpected token a in JSON at position 1SyntaxError:位置 1 处 JSON 中的意外标记 a
【发布时间】:2019-01-04 21:45:09
【问题描述】:

我正在尝试将相册从“汽车”重命名为“汽车”。但不断收到以下错误。 SyntaxError:JSON 中位置 1 的意外标记 a。

可能是什么问题?

我正在使用以下 curl 命令:

-s -X POST -H "Content-Type: application/json" \-d { "album_name" : "Car" }  http://localhost:8080/albums/cars/rename.json

这是我的 server.js:

var express = require('express'),
morgan = require('morgan'),
bodyParser = require('body-parser');
var app = express();
app.use(morgan('dev'));    



var fs = require('fs'),
album_hdlr = require('./handlers/albums.js'),
page_hdlr = require('./handlers/pages.js'),
helpers = require('./handlers/helpers.js');

app.use(express.static(__dirname + "/../static"));

app.get('/v1/albums.json', album_hdlr.list_all);
app.get('/v1/albums/:album_name.json', album_hdlr.album_by_name);
app.get('/pages/:page_name', page_hdlr.generate);
app.get('/pages/:page_name/:sub_page', page_hdlr.generate);
app.get("/", function (req, res) {
res.redirect("/pages/home");
res.end();
});

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.post(function(req, res){
console.log(req.body);
res.end('want to update album name to '
        + req.body.album.new_name + "\n");
});

app.get('*', four_oh_four);

function four_oh_four(req, res) {
res.writeHead(404, { "Content-Type" : "application/json" });
res.end(JSON.stringify(helpers.invalid_resource()) + "\n");
}

app.listen(8080);

还有我的 package.json:

{
"description": "Our Photo Sharing Application with static middleware",
"version": "0.0.2",
"private": true,
"dependencies": {
    "async": "2.x",
    "body-parser": "^1.18.3",
    "express": "4.x",
    "morgan": "1.x",
    "multer": "1.x",
    "typescript": "^2.0.0"
}
}

【问题讨论】:

    标签: json node.js typescript express curl


    【解决方案1】:

    可能是 cURL 请求未正确传递正文请求中的信息?

    我有一个使用 cURL 发出 POST 请求的批处理文件。我用来让正文正确发布的语法是 Amirr0r 答案中的第二种语法。我尝试重新格式化文件的 -d 部分以使用单引号,而不是用正文转义双引号,但它没有正确传递值。

    因此,如果您像上面的答案那样构建 cURL 调用的正文部分,它应该正确地传递数据。

    【讨论】:

      【解决方案2】:

      尝试像这样使用单引号:

      curl -s -X POST -H "Content-Type: application/json" -d '{ "album_name" : "Car" }'  http://localhost:8080/albums/cars/rename.json
      

      或者使用双引号来转义内部双引号

      curl -s -X POST -H "Content-Type: application/json" -d "{ \"album_name\" : \"Car\" }"  http://localhost:8080/albums/cars/rename.json
      

      我也不明白你为什么要转义“-d”。没必要。

      【讨论】:

      • 我现在必须使用双引号,以前不必。运行 curl Windows 10,可能是 Powershell 内置的。
      【解决方案3】:

      在您的 curl 命令中,双引号可能已被评估,请尝试

      -s -X POST -H "Content-Type: application/json" \-d '{ "album_name" : "Car" }' http://localhost:8080/albums/cars/rename.json

      【讨论】:

        猜你喜欢
        • 2021-08-28
        • 2016-08-29
        • 1970-01-01
        • 2020-07-02
        • 2021-05-06
        相关资源
        最近更新 更多