【问题标题】:Sending JSON via Postman causes an error in my Node.js service通过 Postman 发送 JSON 会导致我的 Node.js 服务出错
【发布时间】:2018-10-29 15:22:28
【问题描述】:

我在 node.js 中创建了架构。在我包含数组之前它就可以工作了。

这是我的架构代码:

const Item = new item_Schema({
    info:{
        title:{type:String, required:true},
        bad_point:{type:Number, 'default':0},
        Tag:{type:String, required:true}
    },
    review:{
        Review_text:{type:Array, required:true},
        Phone_list:{type:Array, required:true},
        LatLng_list:{type:Array, required:true}
    }
});

Item.statics.create = function(info, review){
    const list = new this({
        info:{
            title,
            bad_point,
            Tag
        },
        review:{
            Review_text,
            Phone_list,
            LatLng_list
        }
    });

    return list.save();
};

这是我的register 代码:

exports.register = (req, res) => {
    const { info, review } = req.body

    const create = (list) => {
        return Item.create(info, review)
    }

    const respond = () => {
        res.json({
            message: 'place route registered successfully'
        })
    }

    const onError = (error) => {
        res.status(409).json({
            message: error.message
        })
    }


    RouteReviewItem.findOneBytitle(title)
    .then(create)
    .then(respond)
    .catch(onError)
}

这是 Postman JSON 原始代码:

{
    "info":"{
        "title":"test title",
        "badPoint":"0"
        "Tag":"tag1"
        }",
    "review":"{
        "Review_text":["1번리뷰", "2번리뷰", "3번리뷰"],
        "Phone_list":"["010-0000-0000", "010-1111-1111", "010-2222-2222"],
        "LatLng_list":["111.1111,111.1111", "222.222,222.222","333.3333,333.3333"]
        }"
}

这是我在 Postman 中遇到的错误:

SyntaxError: Unexpected token in JSON at position 17
    at JSON.parse (<anonymous>)
    at parse (C:\MainServer\node_modules\body-parser\lib\types\json.js:89:19)
    at C:\MainServer\node_modules\body-parser\lib\read.js:121:18
    at invokeCallback (C:\MainServer\node_modules\raw-body\index.js:224:16)
    at done (C:\MainServer\node_modules\raw-body\index.js:213:7)
    at IncomingMessage.onEnd (C:\MainServer\node_modules\raw-body\index.js:273:7)
    at emitNone (events.js:105:13)
    at IncomingMessage.emit (events.js:207:7)
    at endReadableNT (_stream_readable.js:1045:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

这是邮递员的问题吗?还是 node.js 方面? 看了一下自己正在学习的node.js书,没找到相关资料。

【问题讨论】:

  • 你有一个额外的语音标记。请参阅"regi_info":"{,在 { 之前有一个 "。通过指定引号,regi info 的值将是那个字符串,但你想要的是一个对象,所以去掉引号。ps 问得好问题^^跨度>
  • @Dan Rayson 非常感谢!我已经解决了这个问题祝你有美好的一天!

标签: arrays node.js schema postman


【解决方案1】:

代码没问题,您用于测试的 JSON 有问题。为了进一步测试和调试,我建议您使用JSONLint 之类的服务(或任何具有相同功能的离线工具)来验证您向端点发送的请求是否正确。对于您在问题中发布的请求,此服务抱怨:

Error: Parse error on line 2:
{   "info": "{  "title": "test t
----------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'

下一次,在发送请求之前,请确保它在语法上是正确的。这样您就会知道您的代码存在问题,并且不会花时间调试不存在的问题。

【讨论】:

  • 我确实需要通知错误。我可以参考你的建议来节省我的时间。感谢您的推荐。
猜你喜欢
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 2014-01-10
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多