Node.js 如何使用Redux、Express和React正确循环MongoDB条目?

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

我正在使用React、Redux、Express、Mongo和Node构建一个日志系统,我试图从服务器获取日志,但一直遇到以下错误:

失败的道具类型:提供给
日志
对象
类型的无效道具
日志
,应为
字符串

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.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);
我应该将所需的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,
    });
  }
};