如何使用'require'在NestJS控制器中导入JSON?

时间:2019-12-18 00:33:01

标签: json typescript nestjs

我试图返回一个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的打字稿文件,并将其命名为

2 个答案:

答案 0 :(得分:1)

  1. 我想问题出在您导入.json文件(更改导入而不是const)的方式上
  2. 另一种建议或解决方案是利用res对象(实际上是快速适配器响应对象)的.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字符串化对象