【发布时间】:2020-04-30 19:54:28
【问题描述】:
我终其一生都无法弄清楚如何同时使用 React、Express、Node 和 MongoDB 来查询 MongoDB 数据库并将该信息显示到 DOM 上。我的查询在硬编码时有效,但在使用前端文本输入时,它不起作用。代码如下:
反应组件:
const { facilities } = this.props.facility;
return(
<Container>
<Form onSubmit={this.onSubmit}>
<FormGroup>
<Input
type="text"
name="facilityState"
id="facilityState"
placeholder="Search State"
value={query}
onChange={this.onChange}
/>
</FormGroup>
<Button
color="dark"
style={{marginTop: '2rem'}}
block
> Search </Button>
</Form>
<Button onClick={this.checkReduxState}> Check Redux State </Button>
{ this.props.isAuthenticated ?
<ListGroup>
<TransitionGroup className="facilities-list">
{facilities.map(({_id, name, address, city, state, zip, phone, email}) => (
<CSSTransition key={_id} timeout={500} classNames="fade">
<ListGroupItem>
{ this.props.isAuthenticated ?
<Button
className="remove-btn"
color="danger"
size="sm"
onClick={this.onDeleteClick.bind(this, _id)}
> ×</Button> : null }
<p> {name} </p>
<p> {address} </p>
<p> {city} </p>
<p> {state} </p>
<p> {zip} </p>
<p> {phone} </p>
<p> {email} </p>
</ListGroupItem>
</CSSTransition>
))}
</TransitionGroup>
</ListGroup> : null
}
</Container>
快速路线:
router.get('/query', (req, res) => {
Facility.find({
state: req.body.facilityState
// state: req.query.facilityState
})
.then(facilities => res.json(facilities));
});
Mongoose 架构:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// mongoose.set('useCreateIndex', true);
const FacilitySchema = new Schema({
name: {
type: String,
required: true
},
address: {
type: String,
// text: true,
required: true
},
city: {
type: String,
required: true
},
state: {
type: String,
text: true,
index: true,
required: true
},
zip: {
type: Number,
required: true
},
phone: {
type: Number,
required: true
},
email: {
type: String,
required: true
},
});
// FacilitySchema.index({state: 'text'});
module.exports = Facility = mongoose.model('facility', FacilitySchema);
当我在 req.body.facilityState 中硬编码所需的字符串值时,按下用户界面上的提交按钮即可。此外,当使用 Postman 时,这条路线有效。但是由于某种原因,express req.body(或 req.query)和组件并没有像他们应该的那样相互通信。有人可以帮忙吗?
编辑 这里是 onChange 函数:
onChange = (e) => {
this.setState({ [e.target.name] : e.target.value })
}
编辑 2
这里是redux动作文件查询:
export const queryFacilities = () => dispatch => {
dispatch(setFacilitiesLoading());
axios
.get('/api/facilities/query')
.then(res =>
dispatch({
type: QUERY_FACILITIES,
payload: res.data
}))
.catch(err => dispatch(returnErrors(err.response.data, err.response.status)));
}
【问题讨论】:
-
用
<Input />onChange更新你的代码 -
现在用onChange函数更新
-
您是否在输入
onChange上触发任何节点 API 调用? -
不在 onChange 上,点击提交按钮时,我的 onSubmit 函数在我的 redux 操作文件中进行 API 调用
-
你能用
onSubmit函数更新问题吗?
标签: node.js reactjs mongodb express mongoose