我有以下简化代码:
'use strict'
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
app.use(bodyParser.json())
const storage = {}
app.get('/', (req, res) => {
res.send()
})
app.get('/ping', (req, res) => {
res.send('pong')
})
;[
'mycollection'
].forEach((collection) => {
storage[collection] = []
app.get(`/${collection}`, (req, res) => {
console.log('GET /' + collection)
return res.send(storage[collection])
})
app.post(`/${collection}`, (req, res) => {
console.log('POST /' + collection)
const item = req.body
if (!item) return res.status(400).send({ message: 'Invalid body' })
storage[collection].push(item)
res.status(201).send({ message: 'Successfully added.' })
})
})
const port = process.env.PORT || 3000
console.log('---> Running on port', port)
app.listen(port)
当我执行此请求时:
curl -X POST -H "Content-Type: application/json" -d '"test"' "http://localhost:3000/mycollection"
这给了我以下错误:
SyntaxError: Unexpected token # in JSON at position 0
但是"test"
是有效的JSON。
$ node
> JSON.parse('"test"')
> "test"
答案 0 :(得分:0)
我解决了。从到body-parser
文档:
https://github.com/expressjs/body-parser#strict
strict
设置为true时,只接受数组和对象; false时会接受JSON.parse接受的任何内容。默认为true。
所以这解决了它:
app.use(bodyParser.json({
strict: false
}))