【问题标题】:Having problems with axios.post while try to get data FROM server尝试从服务器获取数据时出现 axios.post 问题
【发布时间】:2021-11-26 19:11:15
【问题描述】:

我正在尝试使用 axios.post(在 TS 中)从服务器获取响应(使用 POST 作为 GET)而不发送任何数据。服务器发回数据,但 REACT 无法处理响应。

这是反应组件:

interface allComapnies {
    comapniesData:CompanyData[];
 }

function GetAllCompanies(props:allComapnies): JSX.Element {
    const myURL = globals.urls.admin+"get_company/all";

    const [comapniesData,setData] = useState([new CompanyData()]);

    useEffect(()=>{axios.post(myURL).then((response)=>{
            console.log(response.data);
            setData(response.data);
        }).catch(error=>{console.log(error)});
    },[]);


    return (
        <div className="getAllCompanies">
             {comapniesData.map(item=><OneCompany
                key ={item.id}
                id={item.id}
                name={item.name}
                email={item.email}
            />)}
        </div>
    );
}

export default GetAllCompanies;

控制台消息显示:

错误:请求失败,状态码 302

  • 在 createError (createError.js:16) 时
  • 安顿下来 (settle.js:17)
  • 在 XMLHttpRequest.onloadend (xhr.js:54)

浏览器从服务器获取响应:

[{id: 2, name: "company2", email: "hgfytj@fdgreg", password: "trjyjytk",…},…]

Server(SPRING)中Controller内部REST Post的作用:

@RestController
@RequestMapping("admin")
@CrossOrigin(origins = "localhost:3000", allowedHeaders = "*")
@RequiredArgsConstructor
public class AdminController extends ClientController {
    private final AdminService adminService;

...
 
@PostMapping("get_company/all")
public ResponseEntity<?> getAllCompanies() {
    return new ResponseEntity<>(adminService.getAllCompanies(), HttpStatus.FOUND);
  }

...
}

【问题讨论】:

    标签: reactjs rest post axios


    【解决方案1】:

    尝试 GET 方法而不是 POST,因为您从数据库获取数据而不是将其发送到。

    【讨论】:

    • 我特意使用 POST,因为 GET 通过 URL 发送信息,安全性较低。此外,可以使用空白 POST 向服务器请求信息。确实,当我使用 API 平台时它可以工作
    • POST 也不应该完全被信任。事实上,恶意意图很容易伪造 POST 请求。如果是用户不能看到的信息,请不要发送给他:)。也许这会有所帮助:security.stackexchange.com/questions/30754/…
    【解决方案2】:

    我发现了问题。那是我发送了 302 号 http 状态号作为发送确认,而不是 200 号。

    这阻止了服务器发送所需的信息作为响应。我现在已将状态更改为 200,即使发送带有空请求的“axios.post”也会收到信息。

    @PostMapping("get_company/all")
    public ResponseEntity<?> getAllCompanies() {
        return new ResponseEntity<>(adminService.getAllCompanies(), HttpStatus.OK);
      }
    

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 1970-01-01
      • 2020-01-16
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多