是否有比使用 if (response.status === 201) 更简单的硬编码替代方法?

Is there a less hard-coded alternative to using if (response.status === 201)?

我正在使用 Fetch API 为我的应用程序检索一些外部数据。这是我的代码:

  fetch("http://127.0.0.1:8000/dictionary/define", {
    method: "POST",
    body: JSON.stringify(values),
  })
    .then(response => {
      if (response.status === 201) router.push("/");
    })
    .catch(error => alert(error));

我想知道是否有 cleaner/less 硬编码替代我的 if (response.status === 201) 条件来指示一切顺利?

我认为这段代码非常好。您正在寻找 201 响应,所以您就这样做了。

如果您只想寻找成功的响应,请使用 response.ok

我会考虑对现有代码进行的唯一清理是将所有响应状态代码存储在一个常量中,这样它就更易于阅读。

像这样:

export const HttpStatusCodes = Object.freeze({
  Created: 201,
});

那你可以 response.status === HttpStatusCodes.Created) 来代替,对我来说这样更舒服。

我认为这更简洁明了,您在单行中执行您的逻辑并检查您的 201 状态并重定向它,所以这几乎都很好竖起大拇指。你很高兴,伙计:)

Response接口的okread-only属性包含一个布尔值,表示响应是否成功(状态在200-299范围内)

e.g. var myOK = response.ok;

// refactor with response.ok
fetch("http://127.0.0.1:8000/dictionary/define", {
    method: "POST",
    body: JSON.stringify(values),
  })
    .then(response => {
      if (response.ok) router.push("/");
    })
    .catch(error => alert(error));

https://developer.mozilla.org/en-US/docs/Web/API/Response/ok 参考 link 这里。

如果您仍然不需要特定的状态代码本身,而只需要成功,这将非常适合您的用例。无论状态码是什么,您都可以检测请求是否成功

如果您知道响应成功并具有 200 到 299 范围内的任何状态代码,您可以使用 response.okhttps://developer.mozilla.org/en-US/docs/Web/API/Response/ok

如果您明确要求 201 状态代码,则没有这样的快捷方式,您需要检查 status,如图所示。