我试图返回一个json文件作为控制器响应,但是我无法获取json的内容。
import { Controller, Get, Res, HttpStatus, Query } from '@nestjs/common';
import { Response } from 'express';
import * as MOCKED_RESPONSE_TS from './data/payment-method.data'; // this ts file is imported fine
const MOCKED_RESPONSE = require('./data/payment-method-mock'); // this json file is not found
@Controller('commons')
export class CommonController {
@Get('/payment-method')
getPaymentMoethod(@Res() res: Response): any {
res.status(HttpStatus.OK).send(MOCKED_RESPONSE);
}
}
实际上日志返回:
Error: Cannot find module './data/payment-method'
并且应用程序未编译
我已经使用express(即使使用打字稿)完成了此任务,并且效果很好。
我不知道我是否必须设置项目以读取json(我是嵌套的newby)。到目前为止,我已经创建了一个输出带有json内容的const的打字稿文件,并将其命名为
答案 0 :(得分:1)
.json
文件(更改导入而不是const)的方式上.json()
方法。 让我们尝试以下代码:
common.controller.ts
文件:import { Controller, Get, Res, HttpStatus, Query } from '@nestjs/common';
import { Response } from 'express';
import * as MOCKED_RESPONSE_TS from './data/payment-method.data'; // this ts file should still be imported fine
import * as MOCKED_RESPONSE from './data/payment-method-mock.json'; // or use const inside the controller function
@Controller('commons')
export class CommonController {
@Get('/payment-method')
getPaymentMoethod(@Res() res: Response): any {
res.status(HttpStatus.OK).json(MOCKED_RESPONSE); // <= this sends response data as json
}
}
也请在您的tsconfig.json
文件中,添加以下行:
tsconfig.json
{
"compilerOptions": {
// ... other options
"resolveJsonModule": true, // here is the important line, this will help VSCode to autocomplete and suggest quick-fixes
// ... other options
}
最后的想法:您可以使用sendfile()
对象的res
方法,具体取决于您是否要发回json 文件 json文件的 内容 。
让我知道是否有帮助;)
答案 1 :(得分:0)
首先请确保正确调用它。
您没有得到任何回应吗?如果不是,请仔细检查您的方法名称,因为它的拼写是这样的:getPaymentMoethod
,应该是这样的:getPaymentMethod
。
第二,我建议您在方法之外进行设置并将其设置为常量。
最后尝试将其包装在JSON.stringify()
中,以将响应转换为json字符串化对象