Node.js 如何使用Redux、Express和React正确循环MongoDB条目?
我正在使用React、Redux、Express、Mongo和Node构建一个日志系统,我试图从服务器获取日志,但一直遇到以下错误: 失败的道具类型:提供给Node.js 如何使用Redux、Express和React正确循环MongoDB条目?,node.js,reactjs,mongodb,express,redux,Node.js,Reactjs,Mongodb,Express,Redux,我正在使用React、Redux、Express、Mongo和Node构建一个日志系统,我试图从服务器获取日志,但一直遇到以下错误: 失败的道具类型:提供给日志的对象类型的无效道具日志,应为字符串 Logs.js import React, { useEffect } from 'react'; import { connect } from 'react-redux'; import LogItem from './LogItem'; import Preloader from '../lay
日志
的对象
类型的无效道具日志
,应为字符串
Logs.js
import React, { useEffect } from 'react';
import { connect } from 'react-redux';
import LogItem from './LogItem';
import Preloader from '../layout/Preloader';
import PropTypes from 'prop-types';
import { getLogs } from '../../actions/logActions';
const Logs = ({ log: { logs, loading }, getLogs }) => {
useEffect(() => {
getLogs();
// eslint-disable-next-line
}, []);
if (loading || logs === null) {
return <Preloader />;
}
return (
<ul className='collection with-header'>
<li className='collection-header'>
<h3 className='center'>Maintenance Logs</h3>
</li>
{!loading && logs.length === 0 ? (
<p className='center'>No logs to show...</p>
) : (
Object.keys(logs).map((log) => <LogItem log={log} key={log._id} />)
)}
</ul>
);
};
Logs.propTypes = {
log: PropTypes.string,
getLogs: PropTypes.func,
};
const mapStateToProps = (state) => ({
log: state.log,
});
export default connect(mapStateToProps, { getLogs })(Logs);
Logs.js
const mongoose=require('mongoose');const LogSchema=mongoose.Schema({message:{type:String,},注意:{type:String,},tech:{type:String,},date:{type:date,默认值:date.now,},});module.exports=mongoose.model('log',LogSchema)代码>
这导致我的日志无法呈现。我知道该数据库是一个面向对象的数据库,所以我在主日志组件中使用了Object.keys(logs).map((log)=>)
,但没有渲染任何内容。任何帮助都会有所帮助,谢谢。直接的错误是,您将对象传递给定义为字符串的道具,就像错误所说的那样。但是,我们看不到数据的形状,因此我们没有办法修复它。因为您这样做logs.length===0
我假设日志是一个数组,尽管您将其视为一个对象Object.keys(logs).
为什么?无论如何,尝试更改这个Object.keys(logs).map((log)=>Ok,这是有意义的。我的日志模式如下:log.jsconst-mongoose=require('mongoose');const-LogSchema=mongoose.schema({message:{type:String,},注意:{type:String,},tech:{type:String,},date:{type:Date,默认值:Date.now,},});module.exports=mongoose.model('log',LogSchema);
我应该将所需的proptype更改为一个对象吗?我使用object.keys,因为我获取logs.map不是一个函数。我将其更改为logs.forEach
并获取logs.forEach不是一个函数。当我console.log时(日志)
我得到null和对象本身。
//Get logs from server
export const getLogs = () => async (dispatch) => {
try {
setLoading();
const res = await fetch('/api/logs');
const data = await res.json();
dispatch({
type: GET_LOGS,
payload: data,
});
} catch (error) {
dispatch({
type: LOGS_ERROR,
payload: error,
});
}
};