参数 'id' 的验证失败。无效号码?
Validation failed for parameter 'id'. Invalid number?
我正在将我的 Node 后端(使用 Microsoft SQL 服务器连接数据库)连接到 React 前端。注意:后端运行良好,并针对所有端点使用邮递员进行了测试。
连接到它时,抛出此错误:“参数 [=42= 的验证失败]。无效数字。”
App.js
import React, { useState, useEffect } from "react";
import axios from "axios";
import './App.css';
import Header from "./components/Header";
import Search from "./components/Search";
import Events from "./components/Events";
const App = () => {
const [customers, setCustomers] = useState([]);
const [isLoading, setIsLoading] = useState(true);
const [searchQuery, setSearchQuery] = useState("");
useEffect(() => {
const fetchEvents = async () => {
const res = await axios(
`http://localhost:8080/api/event/${setSearchQuery}`
);
console.log(res.data);
setCustomers(res.data);
setIsLoading(false);
};
fetchEvents();
}, [searchQuery]);
return (
<div className="container">
<Header />
<Search getQuery={(sq) => setSearchQuery(sq)} />
<Events isLoading={isLoading} customers={customers} />
</div>
);
};
export default App;
Event.js
import React from "react";
const Event = ({ customer }) => {
return (
<div className="card">
<div className="card-inner">
<div className="card-front">
<img src={customer.img} alt="" />
</div>
<div className="card-back">
<h1>{customer.id}</h1>
<ul>
<li>
<strong>Customer ID:</strong> {customer.id}
</li>
<li>
<strong>Customer Number:</strong> {customer.Cus_no}
</li>
<li>
<strong>Range Name:</strong> {customer.RangeName}
</li>
<li>
<strong>Color:</strong> {customer.Color}
</li>
<li>
<strong>Blade Text:</strong> {customer.BladeTExt}
</li>
<li>
<strong>Special Notes:</strong> {customer.SpecialNotes}
</li>
<li>
<strong>Box Quantity:</strong> {customer.box_qty}
</li>
</ul>
</div>
</div>
</div>
);
};
export default Event;
Events.js
import React from "react";
import Event from "./Event";
import Spinner from "./Spinner.js";
const Events = ({ customers, isLoading }) => {
return isLoading ? (
<Spinner />
) : (
<section className="cards">
{customers.map((customer) => (
<Event key={customer.id} customer={customer}></Event> //key={customer.id}
))}
</section>
);
};
export default Events;
Search.js
import React, { useState } from "react";
const Search = ({ getQuery }) => {
const [number, setNumber] = useState(0);
const onChange = (sq) => {
setNumber(sq);
getQuery(sq);
};
return (
<section className="search">
<form>
<input
type="Number"
className="form-control"
placeholder="Search Customer Numbers"
value={number}
onChange={(e) => onChange(e.target.value)}
autoFocus
/>
</form>
</section>
);
};
export default Search;
为了更好地理解,这里有一个示例 SQL Table 输出,其中包含我创建的数据类型:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=c925fb80326b4c3ed2117beddb73b451
现在最重要的是,每当我使用端点“http://localhost:8080/api/events”时,整个客户数据集都会按预期正确显示。但是对于端点“http://localhost:8080/api/event/${setSearchQuery}”,它给了我错误。
我认为你的问题出在这里:
const [searchQuery, setSearchQuery] = useState("");
您用于获取事件的后端 API 需要一个 ID,当您的每个组件安装到 dom 时,您的 useEffect
启动并调用 API !但同时你的 searchQuery
状态是一个空字符串!
注意:
const res = await axios(
`http://localhost:8080/api/event/${setSearchQuery}`
);
您在端点字符串中使用 setSearchQuery
而不是 searchQuery
!
话虽如此,我认为即使在 URL 中更改了该错误,您仍然会收到错误消息!因为您仍然发送一个空字符串作为后端的 id API!
所以最好的解决方案是在 useState
中为 searchQuery
提供默认 ID 而不是传递空字符串,或者如果您无法提供默认值,请确保您的api 向其提供空字符串时不会中断!
我正在将我的 Node 后端(使用 Microsoft SQL 服务器连接数据库)连接到 React 前端。注意:后端运行良好,并针对所有端点使用邮递员进行了测试。
连接到它时,抛出此错误:“参数 [=42= 的验证失败]。无效数字。”
App.js
import React, { useState, useEffect } from "react";
import axios from "axios";
import './App.css';
import Header from "./components/Header";
import Search from "./components/Search";
import Events from "./components/Events";
const App = () => {
const [customers, setCustomers] = useState([]);
const [isLoading, setIsLoading] = useState(true);
const [searchQuery, setSearchQuery] = useState("");
useEffect(() => {
const fetchEvents = async () => {
const res = await axios(
`http://localhost:8080/api/event/${setSearchQuery}`
);
console.log(res.data);
setCustomers(res.data);
setIsLoading(false);
};
fetchEvents();
}, [searchQuery]);
return (
<div className="container">
<Header />
<Search getQuery={(sq) => setSearchQuery(sq)} />
<Events isLoading={isLoading} customers={customers} />
</div>
);
};
export default App;
Event.js
import React from "react";
const Event = ({ customer }) => {
return (
<div className="card">
<div className="card-inner">
<div className="card-front">
<img src={customer.img} alt="" />
</div>
<div className="card-back">
<h1>{customer.id}</h1>
<ul>
<li>
<strong>Customer ID:</strong> {customer.id}
</li>
<li>
<strong>Customer Number:</strong> {customer.Cus_no}
</li>
<li>
<strong>Range Name:</strong> {customer.RangeName}
</li>
<li>
<strong>Color:</strong> {customer.Color}
</li>
<li>
<strong>Blade Text:</strong> {customer.BladeTExt}
</li>
<li>
<strong>Special Notes:</strong> {customer.SpecialNotes}
</li>
<li>
<strong>Box Quantity:</strong> {customer.box_qty}
</li>
</ul>
</div>
</div>
</div>
);
};
export default Event;
Events.js
import React from "react";
import Event from "./Event";
import Spinner from "./Spinner.js";
const Events = ({ customers, isLoading }) => {
return isLoading ? (
<Spinner />
) : (
<section className="cards">
{customers.map((customer) => (
<Event key={customer.id} customer={customer}></Event> //key={customer.id}
))}
</section>
);
};
export default Events;
Search.js
import React, { useState } from "react";
const Search = ({ getQuery }) => {
const [number, setNumber] = useState(0);
const onChange = (sq) => {
setNumber(sq);
getQuery(sq);
};
return (
<section className="search">
<form>
<input
type="Number"
className="form-control"
placeholder="Search Customer Numbers"
value={number}
onChange={(e) => onChange(e.target.value)}
autoFocus
/>
</form>
</section>
);
};
export default Search;
为了更好地理解,这里有一个示例 SQL Table 输出,其中包含我创建的数据类型:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=c925fb80326b4c3ed2117beddb73b451
现在最重要的是,每当我使用端点“http://localhost:8080/api/events”时,整个客户数据集都会按预期正确显示。但是对于端点“http://localhost:8080/api/event/${setSearchQuery}”,它给了我错误。
我认为你的问题出在这里:
const [searchQuery, setSearchQuery] = useState("");
您用于获取事件的后端 API 需要一个 ID,当您的每个组件安装到 dom 时,您的 useEffect
启动并调用 API !但同时你的 searchQuery
状态是一个空字符串!
注意:
const res = await axios(
`http://localhost:8080/api/event/${setSearchQuery}`
);
您在端点字符串中使用 setSearchQuery
而不是 searchQuery
!
话虽如此,我认为即使在 URL 中更改了该错误,您仍然会收到错误消息!因为您仍然发送一个空字符串作为后端的 id API!
所以最好的解决方案是在 useState
中为 searchQuery
提供默认 ID 而不是传递空字符串,或者如果您无法提供默认值,请确保您的api 向其提供空字符串时不会中断!