NestJS:返回一个字符串
Posted
技术标签:
【中文标题】NestJS:返回一个字符串【英文标题】:NestJS : return a string 【发布时间】:2019-12-06 23:39:32 【问题描述】:我正在使用@nrwl/Nx 创建一个项目。
我成功地向其中添加了 Angular 和 Nest 项目。
然后我尝试测试两者之间的连接。
角度代码
content;
testEndpoint()
this.http.get<any>('api/test').subscribe(res => this.content = res);
嵌套代码
@Controller()
export class AppController
constructor(private readonly appService: AppService)
@Get('test')
testConnection(): string
return 'Some content';
正如所见,我只是想从端点返回一个字符串。在the documentation,
使用此内置方法,当请求处理程序返回一个 javascript 对象或数组时,它会自动序列化为 JSON。然而,当它返回一个字符串时,Nest 将只发送一个字符串而不尝试对其进行序列化。这使得响应处理变得简单:只需返回值,其余的由 Nest 处理。
所以很自然,我希望这会起作用(他们的示例与此基本相同)。
但是我遇到了以下错误:
错误:SyntaxError:JSON 中位于 [...] 位置 0 的意外标记 S
即使 HTTP 代码是 200 并且可以在网络选项卡中看到内容。
有人可以向我解释这是什么问题吗?
(我尝试在请求中添加内容类型标头,但没有成功)
EDIT 1:请求:
【问题讨论】:
你能检查一下响应的标题吗?如果客户端认为它是 JSON(显然不是;JSON 格式的字符串从"
字符开始),客户端会忽略 mime 类型或服务器仍将其设置为 'application/json' (或类似的东西)。
尝试将其更改为http.get<string>
,因为这是您所期望的。
@raina77ow 我已将完整请求作为图片上传到我的问题
@HereticMonkey 不工作
@raina77ow 内容类型标头具有误导性,但要让您知道,将 @Header('Content-Type', 'text/plain')
添加到 Nest 后,它仍然不起作用,标头被删除。
【参考方案1】:
看起来 HttpClient 只是忽略了服务器发送的内容类型,试图始终将响应视为 JSON。这很奇怪,但幸运的是,您可以覆盖它,明确指定预期的 responseType,如 the docs 中所述。
this.http.get('api/test', responseType: 'text')
需要注意的是,由于this issue,您必须删除泛型部分(或以其他方式删除类型)。
当
responseType
指定为'json'
以外的其他值时,不得使用泛型,因为随后将自动推断typeof T
。
【讨论】:
这会产生apps/client/src/app/app.component.ts(16,38): error TS2322: Type '"text"' is not assignable to type '"json"'.
从 IntelliSense 中,唯一允许的值是 arraybuffer
用as any
覆盖确实成功了! 2分钟标记为已解决,感谢您的帮助!
啊,是的。 :( the issue 描述了同样的问题,但不知何故仍然存在。是的,他们提到了类似的解决方法。
@raina77ow 你能回答我这个问题吗! ***.com/questions/57266622/…以上是关于NestJS:返回一个字符串的主要内容,如果未能解决你的问题,请参考以下文章
@Get 控制器和布尔查询中的 NestJS 验证失败(需要数字字符串)