Post 使用 Fetch 的请求无法从 componentDidMount 工作
Post request using Fetch not working from componentDidMount
非常感谢您的帮助。我是网络开发和使用 ReactJS 的新手。
我正在尝试创建一个登录页面,使用电子邮件和密码作为凭据。问题是,如果我将我的获取功能放在 ComponentDidMount 中,我会收到 404 错误,但如果我将它从生命周期方法中取出,它会连接到服务器,并且我会在终端中收到用户的详细信息 - 我还不知道如何在控制台或我的 React 应用程序中获取它们。如果您能提出一种方法来做到这一点,我们将不胜感激。我正在尝试获取当前登录的用户详细信息。
这是我的构造方法:
export default class Login extends React.Component {
constructor(props){
super(props);
this.state = {
user:[],
email:'',
password:''
}
对于电子邮件和密码输入,我在表单上附加了一个 handleChange 函数:
这是表单输入的函数:
handleChange = (e) =>{
this.setState({
[e.target.name]: [e.target.value]});
}
这是表格:
<input
type= "email"
name="email"
placeholder="Email address"
value={this.state.email}
onChange={event => this.handleChange(event)}
required
/>
<input
type="password"
name="password"
placeholder="Password"
value={this.state.password}
onChange={event => this.handleChange(event)}
required
/>
这是我在生命周期方法中的获取函数:
async componentDidMount(){
const url = 'http://localhost:3000/login';
const options = { method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': '*/*'
},
body: JSON.stringify({email:this.state.email, password:this.state.password})
};
const response = await fetch(url,options);
let data = response.json();
this.setState({user: data.results})
}
在这个阶段,我在控制台中收到 404 错误:( POST http://localhost:3000/login 404 (Not Found) 在终端中我收到此错误:
data:: {}
user:: []
user.length:: 0
TypeError: Cannot read property 'password' of undefined
at authenticateUser (/Users/noir/Documents/Dana/work/SocialCats/backend/controllers/login.js:16:16)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
如果我切换到 Postman,它可以正常工作,在同一个 url 上。
如果我从生命周期方法中取出我的获取功能,那么它可以验证用户身份,并且我可以在我的终端中获取用户详细信息。
知道为什么会这样吗?
每一个帮助都非常重要,因为我被困在这里。
谢谢:)
在用户提交表单时执行 API 调用。
在 componentDidMount
,用户尚未输入电子邮件和密码。因此,您的 apiCall 会抛出错误。
class Login extends React.Component {
handleSubmit = (e) => {
e.preventDefault();
// do your API call here.
}
render() {
return (
<form onSubmit={handleSubmit}>
/** all the other input tags */
</form>
)
}
}
非常感谢您的帮助。我是网络开发和使用 ReactJS 的新手。 我正在尝试创建一个登录页面,使用电子邮件和密码作为凭据。问题是,如果我将我的获取功能放在 ComponentDidMount 中,我会收到 404 错误,但如果我将它从生命周期方法中取出,它会连接到服务器,并且我会在终端中收到用户的详细信息 - 我还不知道如何在控制台或我的 React 应用程序中获取它们。如果您能提出一种方法来做到这一点,我们将不胜感激。我正在尝试获取当前登录的用户详细信息。
这是我的构造方法:
export default class Login extends React.Component {
constructor(props){
super(props);
this.state = {
user:[],
email:'',
password:''
}
对于电子邮件和密码输入,我在表单上附加了一个 handleChange 函数: 这是表单输入的函数:
handleChange = (e) =>{
this.setState({
[e.target.name]: [e.target.value]});
}
这是表格:
<input
type= "email"
name="email"
placeholder="Email address"
value={this.state.email}
onChange={event => this.handleChange(event)}
required
/>
<input
type="password"
name="password"
placeholder="Password"
value={this.state.password}
onChange={event => this.handleChange(event)}
required
/>
这是我在生命周期方法中的获取函数:
async componentDidMount(){
const url = 'http://localhost:3000/login';
const options = { method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': '*/*'
},
body: JSON.stringify({email:this.state.email, password:this.state.password})
};
const response = await fetch(url,options);
let data = response.json();
this.setState({user: data.results})
}
在这个阶段,我在控制台中收到 404 错误:( POST http://localhost:3000/login 404 (Not Found) 在终端中我收到此错误:
data:: {}
user:: []
user.length:: 0
TypeError: Cannot read property 'password' of undefined
at authenticateUser (/Users/noir/Documents/Dana/work/SocialCats/backend/controllers/login.js:16:16)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
如果我切换到 Postman,它可以正常工作,在同一个 url 上。
如果我从生命周期方法中取出我的获取功能,那么它可以验证用户身份,并且我可以在我的终端中获取用户详细信息。 知道为什么会这样吗? 每一个帮助都非常重要,因为我被困在这里。 谢谢:)
在用户提交表单时执行 API 调用。
在 componentDidMount
,用户尚未输入电子邮件和密码。因此,您的 apiCall 会抛出错误。
class Login extends React.Component {
handleSubmit = (e) => {
e.preventDefault();
// do your API call here.
}
render() {
return (
<form onSubmit={handleSubmit}>
/** all the other input tags */
</form>
)
}
}