我正在使用 NestJs 及其 Swagger 插件自动生成 API 文档。
问题是,我不知道如何使响应模式出现在文档中。在我的 GET 路由中,我得到的只是“Code 200”,没有数据结构。
我有一个典型的设置,其中控制器方法使用相应的服务方法,而服务方法又使用 TypeOrm 存储库。例如:
@Get()
findAll() {
return this.usersService.findAll();
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用@ApiResponse装饰器,但没有真正看到任何方法让它达到这个目的。此外,创建 user.dto.ts 并将其设为控制器路由的返回类型并没有任何好处。
最终,这就是我在 Swagger 中得到的:
我如何定义响应主体架构?
由于反应查询在很大程度上基于声明性方法,我在所有示例中看到的错误处理看起来像这样:
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,而是基于某些手动一次性触发器。该警报只是一个基本示例。
任何建议将不胜感激!
我正在使用 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 是否故意设置了一些限制?
我正在尝试实现功能,其中每个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.
我正在 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)
我的直觉告诉我字典更快。事实是什么?
我正在使用 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。
我正在使用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 元素。
如何做呢?
我需要从 html 字符串中多次删除样式标签的全部内容。我无法使用 DOM 解析器。
我怎样才能在 JavaScript 中做到这一点?
我有一些服务,它需要在其构造函数中使用配置对象文字,如下所示:
@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 系统,或创建另一个“内部”提供程序(配置)?
我在我的 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”放在别处。我尝试使用样式注入,但没有成功。
有人可以指出我正确的方向吗?
javascript ×6
reactjs ×4
nestjs ×3
typescript ×2
css ×1
dictionary ×1
draftjs ×1
electron ×1
html ×1
loops ×1
material-ui ×1
performance ×1
react-query ×1
react-router ×1
regex ×1
swagger ×1
wysiwyg ×1