小编mer*_*rko的帖子

获取 API 错误处理

我想显示来自我的 API 的错误消息,问题是如果我检查,我无法到达该错误response.ok,它返回 Fetch 错误,而不是来自 API 的错误。

如果我不使用if(response.ok)...它,它会从 API 返回错误,但它会调度成功操作。

这是示例,登录操作:

export const signIn = data => dispatch => {
  dispatch({ 
    type: SIGN_IN
    }) 
  fetch(API_URL+'/login', { 
   method: 'POST',
   headers: {
      'content-type': 'application/json'
      },
   body: JSON.stringify(data),
    })
    .then( response => {
    if (!response.ok) { throw response }
    return response.json()  //we only get here if there is no error
  })
  .then( json => {
    dispatch({
      type: SIGN_IN_SUCCESS, payload: json
    }),
    localStorage.setItem("token", 'Bearer '+json.token)
    localStorage.setItem("user", JSON.stringify(json.user))
  })
  .catch( err …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling fetch reactjs

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

通过NGRX显示成功,错误消息的正确方法

我知道这个问题的两个解决方案,第一个是将消息保持在你看不好的状态,第二个是订阅ActionSubject我当前用来显示消息的消息.

还有其他解决方案吗?另外如何在模板中设置CSS类,而不是在组件中?

这是我的例子:

 this.actionSubject.subscribe(action => {
      if (action.type === fromActions.LOGIN_SUCCESS) {
        this.message$ = action.payload.message;
        this.messageClass = 'alert alert-success';
      }
      if (action.type === fromActions.LOGIN_FAILURE) {
        this.message$ = action.payload.error.message;
        this.messageClass = 'alert alert-danger';
        this.LoginForm.reset();
      }
    })
Run Code Online (Sandbox Code Playgroud)

这似乎太长了,而不是DRY,我应该在我期望收到消息的每个组件中都这样做.

javascript ngrx angular ngrx-store

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

反应编辑表单创建

我刚开始使用 React,一直停留在编辑表单上。我需要预填充输入,但也需要能够编辑它。如果我把 defaultValue,我不能把值放在输入元素上。此时我可以输入输入,但我必须编辑两个字段(表单有两个字段)才能保存两个值。我该怎么做?

示例:我有食谱名称和成分,我用编辑表单打开模态,它是预填充的,我添加了一些成分但保持名称不变。它节省了:

{name: "", ingredients: ing1,ing2,newIngredient}
Run Code Online (Sandbox Code Playgroud)

{name: "", ingredients: ing1,ing2,newIngredient}
Run Code Online (Sandbox Code Playgroud)

javascript forms jsx reactjs

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

打开AVD管理器时出现Android Studio错误

我一直都遇到这个错误:

java.lang.IllegalArgumentException: Argument for @NotNull parameter 'project' of com/android/tools/idea/avdmanager/AccelerationErrorNotificationPanel.<init> must not be null
    at com.android.tools.idea.avdmanager.AccelerationErrorNotificationPanel.$$$reportNull$$$0(AccelerationErrorNotificationPanel.java)
    at com.android.tools.idea.avdmanager.AccelerationErrorNotificationPanel.<init>(AccelerationErrorNotificationPanel.java)
    at com.android.tools.idea.avdmanager.AvdDisplayList.refreshErrorCheck(AvdDisplayList.java:517)
    at com.android.tools.idea.avdmanager.AvdDisplayList.refreshAvds(AvdDisplayList.java:218)
    at com.android.tools.idea.avdmanager.AvdDisplayList.<init>(AvdDisplayList.java:175)
    at com.android.tools.idea.avdmanager.AvdListDialog.<init>(AvdListDialog.java:43)
    at org.jetbrains.android.actions.RunAndroidAvdManagerAction.openAvdManager(RunAndroidAvdManagerAction.java:55)
    at org.jetbrains.android.actions.RunAndroidAvdManagerAction.actionPerformed(RunAndroidAvdManagerAction.java:48)
    at com.intellij.openapi.wm.impl.welcomeScreen.FlatWelcomeFrame$FlatWelcomeScreen$IconsFreeActionGroup$1.actionPerformed(FlatWelcomeFrame.java:742)
    at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:255)
    at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:272)
    at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:203)
    at com.intellij.ui.popup.ActionPopupStep.performAction(ActionPopupStep.java:191)
    at com.intellij.ui.popup.ActionPopupStep.lambda$onChosen$2(ActionPopupStep.java:185)
    at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:195)
    at com.intellij.ui.popup.AbstractPopup.lambda$dispose$8(AbstractPopup.java:1417)
    at com.intellij.util.ui.UIUtil.invokeLaterIfNeeded(UIUtil.java:3094)
    at com.intellij.ide.IdeEventQueue.ifFocusEventsInTheQueue(IdeEventQueue.java:189)
    at com.intellij.ide.IdeEventQueue.executeWhenAllFocusEventsLeftTheQueue(IdeEventQueue.java:138)
    at com.intellij.openapi.wm.impl.FocusManagerImpl.doWhenFocusSettlesDown(FocusManagerImpl.java:190)
    at com.intellij.ui.popup.AbstractPopup.dispose(AbstractPopup.java:1411)
    at com.intellij.ui.popup.WizardPopup.dispose(WizardPopup.java:160)
    at com.intellij.ui.popup.list.ListPopupImpl.dispose(ListPopupImpl.java:307)
    at com.intellij.ui.popup.PopupFactoryImpl$ActionGroupPopup.dispose(PopupFactoryImpl.java:289)
    at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:48)
    at com.intellij.openapi.util.Disposer$1.execute(Disposer.java:44)
    at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:138)
    at com.intellij.openapi.util.objectTree.ObjectNode$1.execute(ObjectNode.java:107)
    at com.intellij.openapi.util.objectTree.ObjectTree.executeActionWithRecursiveGuard(ObjectTree.java:182)
    at com.intellij.openapi.util.objectTree.ObjectNode.execute(ObjectNode.java:107)
    at com.intellij.openapi.util.objectTree.ObjectTree.executeAll(ObjectTree.java:151)
    at com.intellij.openapi.util.Disposer.dispose(Disposer.java:129)
    at com.intellij.openapi.util.Disposer.dispose(Disposer.java:125)
    at …
Run Code Online (Sandbox Code Playgroud)

android emulation android-virtual-device react-native

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

尝试测试组件时找不到模块“反应”

我正在尝试向我的应用程序添加一些测试,但是当我安装react-testing-libraryand 时jest-dom,我编写了这个测试, test ifcomponentDidMount被调用:

import { render } from "react-testing-library";

import { QuestionContainer } from "../containers/QuestionContainer";

it("should call componentDidMount", () => {
  const cDM = jest.spyOn(QuestionContainer.prototype, "componentDidMount");

  render(QuestionContainer);

  expect(cDM).toHaveBeenCalled(1);
});
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

Cannot find module 'react' from 'index.js'

However, Jest was able to find:
    '../containers/QuestionContainer.js'

You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['web.js', 'js', 'web.ts', 'ts', 'web.tsx', 'tsx', 'json', 'web.jsx', 'jsx', 'node'].
Run Code Online (Sandbox Code Playgroud)

我不认为文件扩展名有问题..

javascript testing reactjs react-testing-library

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

使用Mongoose查询数据时如何显示Multer上传的图片

正如标题所说,我想显示头像但它有 uploads\\img.jpg路径,例如当您从数据库获取用户信息时,如何在应用程序的前端部分显示它?

以下是用户数据:

{ 
       username: 'm',
       name: 'm',
       email: 'mmerko@gmail.com',
       id: '5b64247eb03a573b2818f3c4',
       avatar: 'uploads\\img-1533289594220.jpg'
}
Run Code Online (Sandbox Code Playgroud)

upload image node.js reactjs multer

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

NGRX 动作/效果上的多个有效负载

我需要向 API 发送一个 put 请求,ngrx/effect但该请求需要 id 和内容,以便 MongoDB 能够找到帖子。

这是代码,我尝试设置两个操作有效负载:

export class UpdatePost implements Action {
    readonly type = UPDATE_POST

    constructor(public payload: string & Post ) { }
}
Run Code Online (Sandbox Code Playgroud)

这是效果:

@Effect() 
    editPost$: Observable<Action> = this.actions$
    .ofType(PostActions.UPDATE_POST)
    .map((action: PostActions.UpdatePost) => action.payload)
    .switchMap((?) => {
        return this.postService.editPost(id, post);
    })
    .map(editedpost => ({type: PostActions.UPDATE_POST_SUCCESS, payload: editedpost}))
}
Run Code Online (Sandbox Code Playgroud)

editPost()需要两个参数:id 和 content。

我想我的操作有效负载应该以其他方式设置,我是新手,ngrx所以欢迎提出建议。

javascript mongodb ngrx ngrx-effects angular

0
推荐指数
1
解决办法
4588
查看次数

Vuetify 覆盖覆盖抽屉

我正在尝试为 Vue 应用程序创建一个导航栏,我正在使用 Vuetify,在大屏幕上有工具栏,在小屏幕上有打开导航抽屉的汉堡包图标。

它可以工作,但是抽屉前面有一个覆盖层,我无法更改页面。

这是代码:

<template>
  <div>
    <v-app-bar dark>
      <v-app-bar-nav-icon class="hidden-md-and-up" @click="sidebar = !sidebar"></v-app-bar-nav-icon>
      <v-navigation-drawer v-model="sidebar" app>
        <v-list>
          <v-list-item v-for="(item, i) in menuItems" exact :key="i" :to="item.path">{{item.title}}</v-list-item>
        </v-list>
      </v-navigation-drawer>
      <v-toolbar-title>Jobify</v-toolbar-title>

      <v-spacer></v-spacer>

      <v-toolbar-items class="hidden-sm-and-down">
        <v-btn text v-for="item in menuItems" :key="item.title">
          <router-link :to="item.path">{{item.title}}</router-link>
        </v-btn>
      </v-toolbar-items>
    </v-app-bar>
  </div>
</template>

<script>
export default {
  data: function() {
    return {
      sidebar: false,
      menuItems: [
        { path: "/jobs", name: "jobs", title: "Jobs" },
        { path: "/companies", name: "companies", title: "Companies" },
        { path: "/jobs/new", name: "new-job", …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vue-component vuejs2 vuetify.js

0
推荐指数
1
解决办法
4290
查看次数