NodeJS:解决 Unexpected token # in JSON at position 0

662 阅读1分钟

bodyParser.json 使用对应报错, 报错信息如下

SyntaxError: Unexpected token # in JSON at position 0
    at JSON.parse (<anonymous>)
    at createStrictSyntaxError (E:\XXXXX\node_modules\body-parser\lib\types\json.js:157:10)
    at parse (E:\XXXXX\node_modules\body-parser\lib\types\json.js:83:15)
    at E:XXXXX\node_modules\body-parser\lib\read.js:121:18
    at invokeCallback (E:\XXXXX\node_modules\raw-body\index.js:224:16)        
    at done (E:\XXXXX\raw-body\index.js:213:7)
    at IncomingMessage.onEnd (E:\XXXXX\node_modules\raw-body\index.js:273:7)  
    at emitNone (events.js:106:13)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)

接口返回 400

image.png

问题:

  • 有一个请求数据的方式不对,导致接口返回 400,该请求方式不能修改,所以只能从后台入手。
// 源头(bodyParser。json 解析的时候出错 发现请求类型不对,需要对路由进行特殊处理)
app.use(bodyParser.json({limit: '50mb'}));

解决办法:

// app.use(bodyParser.json({limit: '50mb'}));
app.use((req, res, next) => {
    bodyParser.json()(req, res, (error) => {
        if (error instanceof SyntaxError) {
            // /explore/getDiagramByExploreKey/' 为400的那个接口地址, 进行特殊处理
            if(req.path.indexOf('/explore/getDiagramByExploreKey/') > -1){
                req.body.data = error.body
                next()
                return
            }
            res.sendStatus(400);
        } else {
            next();
        }
    });
});