表达意外的记号 k

Posted

技术标签:

【中文标题】表达意外的记号 k【英文标题】:express Unexpected token k 【发布时间】:2016-09-19 20:00:20 【问题描述】:

我有一个 express 应用程序,它被设计成一个简单的 restful api。 这是我添加正文解析器中间件的 app.js 文件

app.use(bodyParser.json());
app.use(bodyParser.urlencoded(extended: true));

使用 bodyparser 1.15.2

这是我的基本路由文件

... 
r.post('/search/:keyword', function(req, res)
var __keyword = req.params.keyword,
console.log(req.body);

我正在使用邮递员发送请求,当我使用原始选项卡发送带有 application/json 标头的请求时,结果很好。这种发送请求的方式生成的代码是这样的

POST /api/search/mykeyword HTTP/1.1
Host: localhost:8080
Content-Type: application/json
Cache-Control: no-cache

    "key": "value"

在 postman 中使用 x-form-urlencoded 选项时出现此错误

SyntaxError: Unexpected token k
    at parse (D:<projectpath>\node_modules\body-parser\lib\types\json.js:83:15)
    at D:<projectpath>\node_modules\body-parser\lib\read.js:116:18
    at invokeCallback (D:<projectpath>\node_modules\body-parser\node_modules\raw-body\index.js:262:16)
    at done (D:<projectpath>\node_modules\body-parser\node_modules\raw-body\index.js:251:7)
    at IncomingMessage.onEnd (D:<projectpath>\node_modules\body-parser\node_modules\raw-body\index.js:307:7)
    at emitNone (events.js:67:13)
    at IncomingMessage.emit (events.js:166:7)
    at endReadableNT (_stream_readable.js:913:12)
    at nextTickCallbackWith2Args (node.js:442:9)
    at process._tickCallback (node.js:356:17)

然后请求看起来像这样

POST /api/search/mykeyword HTTP/1.1
Host: localhost:8080
Content-Type: application/json
Cache-Control: no-cache


    "key": "value"

对我来说,这看起来完全一样,但它产生了这个错误?这是 bodyparser、express 还是 postman 中的错误?还是这是我的错? 只调用时

app.use(bodyParser.urlencoded(extended: true));

req.body 对象始终为空,无论我使用哪种描述的方式

【问题讨论】:

我认为您将正文类型设置为x-www-form-urlencoded,将内容类型设置为application/json。你可以在标题中将 Content-Type 更改为 application/x-www-form-urlencoded 并检查吗? 【参考方案1】:

当您使用原始 Body 时,选择 JSON (application/json) 而不是 Textreq.body 将被填充

你也可以删除app.use(bodyParser.urlencoded(extended: true));

如果您想使用 application/x-www-form-urlencoded,请检查 Postman 是否在“标题”选项卡中没有 application/json

否则 bodyParser 会抛出此错误

https://github.com/expressjs/body-parser/commit/06a5182e6b1e51eb6723531b36d4ec173ec41268#diff-2f6af76c010570bda08534da011fac9fR83

【讨论】:

以上是关于表达意外的记号 k的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配产生意外结果

JSLint 的“语句位置出现意外的表达式‘i’”是啥意思?

创建字符串表达式时出现意外标记?

请放心 - 无效的 JSON 表达式:Script1.groovy:1:意外输入:'['

在 Kotlin 脚本中“包含”不起作用:^ 意外标记(使用 ';' 分隔同一行上的表达式)

正则表达式给出边缘但不是铬的意外量词