小编i.b*_*rod的帖子

如何在 NestJs 生成的 Swagger 文档中定义响应主体对象?

我正在使用 NestJs 及其 Swagger 插件自动生成 API 文档。

问题是,我不知道如何使响应模式出现在文档中。在我的 GET 路由中,我得到的只是“Code 200”,没有数据结构。

我有一个典型的设置,其中控制器方法使用相应的服务方法,而服务方法又使用 TypeOrm 存储库。例如:

@Get()
 findAll() {    
   return this.usersService.findAll();
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用@ApiResponse装饰器,但没有真正看到任何方法让它达到这个目的。此外,创建 user.dto.ts 并将其设为控制器路由的返回类型并没有任何好处。

最终,这就是我在 Swagger 中得到的:

昂首阔步

我如何定义响应主体架构?

swagger typescript nestjs

17
推荐指数
2
解决办法
3万
查看次数

如何使用react-query强制处理错误?

由于反应查询在很大程度上基于声明性方法,我在所有示例中看到的错误处理看起来像这样:

function Todos() {
   const { isLoading, isError, data, error } = useQuery('todos', fetchTodoList)
 
   if (isLoading) {
     return <span>Loading...</span>
   }
 
   if (isError) {//If there is an error, render different JSX
     return <span>Error: {error.message}</span>
   } 
   
   return (
     <ul>
       {data.map(todo => (
         <li key={todo.id}>{todo.title}</li>
       ))}
     </ul>
   )
 }
Run Code Online (Sandbox Code Playgroud)

但是,如果我只想在出现错误时显示警报怎么办?或者,也许我正在使用一些错误处理接口,它具有命令式触发器?像这样的东西:

if (isError) alert(`An error has occurred: ${error.message}`)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我收到 两个警报。某些原因导致组件重新渲染,这当然会导致“重复”错误处理。

为什么这对我很重要?因为我的错误处理逻辑可能不是基于在组件中渲染某些特定的 JSX,而是基于某些手动一次性触发器。该警报只是一个基本示例。

任何建议将不胜感激!

javascript reactjs react-query

8
推荐指数
1
解决办法
2万
查看次数

HTML 输入自动完成功能在 Electron 中不起作用

我正在使用 Electron 和 React 构建一些与 SocketIO 相关的应用程序。用户需要填写一个地址来连接:

<form autoComplete="on" onSubmit={this.onAddressSubmit}>
       <label htmlFor="address">Connect to:</label>
       <input id="address" name="address" onChange={this.onAddressChange} value={this.state.address} type="text" />
       <input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

由于某种原因,当我使用 Electron 运行它时,自动完成建议不会显示,但当我使用“普通”Chrome 浏览器运行它时,自动完成建议会起作用。

对于可以做什么有什么建议吗?Electron 是否故意设置了一些限制?

html electron

7
推荐指数
0
解决办法
1558
查看次数

React router 4:如何在Route的render方法中等待promise的解析?

我正在尝试实现功能,其中每个Route将首先等待一些ajax承诺解决,然后才会呈现路由.我看到onEnter不再存在,所以我正在尝试渲染方法.

我的路线定义如下:

{cmsRoutes.map((route, idx) => {
              console.log(route.resolve)
              return route.component ? (<Route  key={idx} path={route.path} exact={route.exact} name={route.name} render={props =>{
               route.resolve()
               .then(({data})=>{
                 console.log(data)
                  return (
                <route.component {...props} />
              )
                }) 

              } } />)
                : (null);
            },
            )}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它只是迭代某个数组,它保存每个路由的数据.路由对象的一个​​字段是"resolve",它指向一个返回promise的函数.像这个:

const resolvemanageContactApplications = ()=> {
  return ajax('/contact')
};
Run Code Online (Sandbox Code Playgroud)

执行此操作时,我收到以下错误:

路线(...):渲染没有返回任何内容.这通常意味着缺少return语句.或者,为了不渲染,返回null.

这当然会发生,因为在执行ajax时,路由没有返回任何内容.问题是:如何让React路由器4等待承诺解析?必须有某种方式.我记得AngaulrJS UI-Router实际上有一些"解决"api.

javascript reactjs react-router

6
推荐指数
1
解决办法
4824
查看次数

JS:使用字典比循环数组更快吗?

我正在 Nodejs 中构建一些程序,该程序需要跟踪大量用户的内存。另外,我将有一个按 id 过滤用户的功能。代码看起来像这样:

const users = [
    {
        id: 1,
        name: 'John',
        friends: [3, 6, 8]
    },
    {
        id: 2,
        name: 'Mark',
        friends: [567, 23]
    }
]

function getUserById(userId) {
    const user = users.filter(user => user.id === userId);
    return user[0];
}
Run Code Online (Sandbox Code Playgroud)

问题是,这个版本是否普遍更快(每个键都是用户id):

const users = {
    1: {
        id: 1,
        name: 'John',
        friends: [3, 6, 8]
    },
    2: {
        id: 2,
        name: 'Mark',
        friends: [567, 23]
    }
}

function getUserById(userId) {
   return users[userId];
}
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我字典更快。事实是什么?

javascript performance dictionary loops

6
推荐指数
1
解决办法
4324
查看次数

使用 @InjectRepository 时测试失败:Nest 无法解析存储库

我正在使用 NestJs 和 Typeorm,正常设置。UsersService 获取注入的 Typeorm 存储库:

constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
  ) {}
Run Code Online (Sandbox Code Playgroud)

在用户模块中:

@Module({
  imports:[ TypeOrmModule.forFeature([User])],
  controllers: [UsersController ],
  providers: [UsersService]
})
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,没有什么特别的。但无论我做什么,自动生成的 UsersService 测试都会失败:

describe('UsersService', () => {
  let service: UsersService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [UsersService],      
    }).compile();

    service = module.get<UsersService>(UsersService);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
  });
});
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Nest 无法解析 UsersService 的依赖关系(?)。请确保索引 [0] 处的参数 UserRepository 在 RootTestModule 上下文中可用。

我发现 Stackoverflow 上的解决方案似乎已经过时,或者过于复杂。我知道问题源于 @InjectRepository 的使用。

解决办法是什么?我尝试下载其他人相当相似的项目,并得到相同的错误!均带有巢穴 8 和巢穴 7。

javascript dependency-injection typescript nestjs

6
推荐指数
2
解决办法
1917
查看次数

如何在Draft.js中插入HTML?

我正在使用react-draft-wysiwyg 编辑器,它构建在Draft.js 之上。我试图弄清楚如何以编程方式插入 HTML,例如:

<h1>Hey</h1>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我得到的最接近的是使用 Modifier 模块的 insertText() 方法。例子:

insert = ()=>{
  const editorState = this.state.editorState;

  const selection = editorState.getSelection();

  const contentState = editorState.getCurrentContent();

  const ncs = Modifier.insertText(contentState, selection, "<h1>Hey</h1>",);

  const es = EditorState.push(editorState, ncs, 'insert-fragment');

  this.setState({editorState: es})
}
Run Code Online (Sandbox Code Playgroud)

这会导致插入文字字符串,而不是 HTML H1 元素。

如何做呢?

wysiwyg reactjs draftjs

5
推荐指数
1
解决办法
1万
查看次数

JS:如何使用正则表达式从 HTML 字符串中删除样式标签及其内容?

我需要从 html 字符串中多次删除样式标签的全部内容。我无法使用 DOM 解析器。

我怎样才能在 JavaScript 中做到这一点?

javascript regex

5
推荐指数
2
解决办法
7485
查看次数

如何将构造函数参数传递给 NestJS 提供者?

我有一些服务,它需要在其构造函数中使用配置对象文字,如下所示:

@Injectable()
export class BatteriesService { 

    constructor(private config: Config) { }//The provider needs a config object 

}
Run Code Online (Sandbox Code Playgroud)

如果我只是将此类添加到模块的提供者数组中,显然会收到错误,因为缺少构造函数参数。

因此,我需要以某种方式创建一个实例,而不是仅仅引用 BatteriesService 类。我试过这个:

@Module({
  controllers: [BatteriesController],
  providers: [{
    useFactory: ()=>{
     return new BatteriesService({'someProp': 'someValue'})
    },
    provide:'BatteriesService'
  }]
})
Run Code Online (Sandbox Code Playgroud)

和这个:

@Module({
  controllers: [BatteriesController],
  providers: [{
    useValue:new BatteriesService({'someProp': 'someValue'}),
    provide:'BatteriesService'
  }]
})
Run Code Online (Sandbox Code Playgroud)

在这两种情况下我都会收到以下错误:

错误:Nest 无法解析 BatteriesController 的依赖关系(?)。请确保索引 [0] 处的参数 BatteriesService 在 BatteriesModule 上下文中可用。

如何才能做到这一点,而不“诉诸”绕过 DI 系统,或创建另一个“内部”提供程序(配置)?

javascript dependency-injection nestjs

5
推荐指数
1
解决办法
1万
查看次数

如何在 Tab 组件中更改 Icon 组件的位置?

我在我的 React 项目中使用 MaterialUI 的选项卡。

这是选项卡的 JSX:

<AppBar color="default" position="static">
       <Tabs indicatorColor="primary" textColor="primary" value={tabIndex} onChange={this.handleChange}>
         {instances.map(instance =>    
            <StyledTab                        
                    style={{ textTransform: 'initial' }}
                    onClick={() => { this.changeActiveInstance(instance.id) }}
                    label={this.getTabAddress(instance)}
                    icon={<ClearIcon ></ClearIcon>}
                  >    
            </StyledTab>
         )}                   
 </Tabs>
Run Code Online (Sandbox Code Playgroud)

这就是我注入 css 的方式:

const StyledTab = withStyles({
  root: {
    textTransform: 'initial' 
  },  
})(Tab);
Run Code Online (Sandbox Code Playgroud)

结果是这样的: 标签

我想将“ClearIcon”放在别处。我尝试使用样式注入,但没有成功。

有人可以指出我正确的方向吗?

css reactjs material-ui

4
推荐指数
1
解决办法
4345
查看次数