SyntaxError:JSON中位置1处的意外令牌a

时间:2018-07-27 18:21:02

标签: json node.js typescript express curl

我正在尝试将专辑从“汽车”重命名为“汽车”。但是,请继续获取以下错误。 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"
}
}

3 个答案:

答案 0 :(得分:1)

在curl命令中,可能已对双引号进行了评估,请尝试

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

答案 1 :(得分:1)


尝试使用单引号,如下所示:

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”。没必要。

答案 2 :(得分:0)

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

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

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