我在设置API时遇到了麻烦。我收到的错误如下:
[
{
"message": "Wrong data in the response. ",
"error": [
{
"code": "INVALID_TYPE",
"params": [
"object",
"string"
],
"message": "Expected type object but found type string",
"path": "#/"
}
],
"content": "{\"success\":true,\"payload\":{\"userId\":47}}"
}
]
带有响应头:
connection: keep-alive
content-length: 233
content-type: application/json; charset=utf-8
date: Fri, 17 Apr 2020 08:09:38 GMT
etag: W/"e9-2OFjPp0RZp8asoi4T2vo8yXiZxE"
x-powered-by: Express
现在,我希望它能够工作,因为使用Swagger 2.0而不是oas-tools 3.0.1时,该代码也可以工作。这是我的招摇文件:
openapi: 3.0.1
info:
title: Swagger test
version: 0.0.1
servers:
- url: http://localhost:8081/
paths:
/add-user:
post:
x-router-controller: 'addUser'
description: Adds a user to the database
operationId: add
requestBody:
$ref: '#/components/requestBodies/AddUser'
responses:
201:
description: Successfully added the user to the database
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
payload:
type: object
properties:
userId:
type: integer
这是我的节点脚本,我在其中发送回响应:
db
.query(insert_user_query, [username, password])
.then(function(result) {
var response = {
"success": true,
"payload": {
"userId": result.rows[0].user_id
}
}
res.status(201).json(response)
})
现在我完全迷失了,因为我在响应变量中构建JSON,并设置响应代码201并将其作为json发送(添加了application / json内容类型),而Swagger解释为字符串而不是对象。
这里有人可以向我指出正确的方向吗?
答案 0 :(得分:0)
您必须将字符串取回并将其解析回一个对象。
res.json()
接收您的对象,并使用json格式将其转换为字符串。 application/json
是一种字符串格式,这就是您通过网络发送javascript格式的对象的方式。它们被转换为规范的字符串格式,并通过网络发送,然后将它们用作对象,必须对其进行解析并将其转换回真实的实时对象。
您没有显示接收代码,但是接收方的某些内容需要在字符串响应上调用JSON.parse()
。这将返回给您一个可以使用的实际对象,因为它将json字符串转换回接收方的对象。
答案 1 :(得分:0)
我遇到了同样的问题,并且正在使用Express 4.x。
我可能会弄错,但我认为“ res.json”可能存在问题(即res.status(xxx).json({a:b});)
我通过使用send解决了这个问题:
res.status(201).send(response); // in your case