节点JS | TypeError:无法读取未定义的属性“ p_nome”

时间:2020-07-02 20:58:39

标签: node.js reactjs

下午好,我是新来的人,node.js还是有问题。

我在网页上有一张桌子,您将在其中收到旅行数据。列(Id语言环境,名称,日期,时间)出现在travel_order模型中,但是“ localities name”列旨在使用ID列出区域名称。该位置的ID在“位置ID”列中列出。但是,在列出时,它给了我错误:“ TypeError:无法读取未定义的属性'designacao'”。

为了更好地了解表格,在数据的第一行中,1是出发ID,124是到达ID。我已经上传了一张桌子的照片以及控制器和模型的照片。

inserir a descrição da imagem aqui

通过以下代码中的功能loadFillData ()完成表中数据的插入:

import React from 'react';
import '../../../assets/css/Pagamentos.css'
import 'js-datepicker/dist/datepicker.min.css';
import '../../../assets/css/bootstrap.css';
import axios from 'axios';
import { data } from 'jquery';
const datepicker = require('js-datepicker');

class Pagina extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            pag_pendentes: []
        }
    }

    componentDidMount() {
        const picker = datepicker('#calendario', {
            formatter: (input, date, instance) => {
                input.value = new Intl.DateTimeFormat('en-GB').format(date)
            }
        });

        const url = "http://localhost:3001/operadora/pendente";
        axios.get(url)
        .then(res=>{
            if(res.data.success){
                const data = res.data.data;
                this.setState({pag_pendentes:data});
            }else{
                alert("Erro");
            }
        })
        .catch(error=>{
            alert(error)
        });
    }

    render() {
        return (
            <div>
                <div id="div-filtragem">
                    <label className="Label_DatePicker">Data inicio:</label>
                    <input placeholder="Selecione uma data" type="text" id="calendario" className="form-control DatePicker datepicker" style={{ width: "auto" }} />
                    <label className="Label_DatePicker">Data fim:</label>
                    <input placeholder="Selecione uma data" type="text" id="calendario" className="form-control DatePicker datepicker" style={{ width: "auto" }} />
                    <button type="button" className="ButtonFilter ">Filtrar</button>
                </div>
                <div className="div_tabela">

                    <table className="table tabela" >
                        <thead>
                            <tr>
                                <th scope="col">IDs localidades</th>
                                <th scope ="col">nome localidades</th>
                                <th scope="col">Nome</th>
                                <th scope="col">Data</th>
                                <th scope="col">Hora</th>
                                <th scope="col">Valor</th>
                            </tr>
                        </thead>
                        <tbody>
                            
                            {this.loadFillData()}
                        </tbody>
                    </table>
                </div>
            </div>
        );
    }
    loadFillData(){
        console.log(this.state.pag_pendentes);
        return this.state.pag_pendentes.map((data, index) => {
            
            return (
                <tr key ={index}>
                    <td className="td_viagem">{data.partida + "-"+data.chegada}</td>
                    <td>{data.pp.designacao + "-"+data.pc.designacao}</td>
                    <td>{data.pessoa.p_nome + " " +data.pessoa.u_nome}</td>
                    <td>{data.data_viagem}</td>
                    <td>{data.hora_viagem}</td>
                    <td>10€</td>
                </tr>

            )
        });
    }
}

export default Pagina;

控制器:

var Viagem = require('../../model/viagem');
var Pedido_viagem = require('../../model/pedido_viagem');
var Estado = require('../../model/estado');
var Pessoa = require('../../model/pessoa');
var Partida = require('../../model/freguesias');
var Chegada = require('../../model/freguesias');
const sequelize = require('../../model/database');

const op_pagamentos = {}
sequelize.sync()
op_pagamentos.pendentes = async(req,res) => {
    const data = await Pedido_viagem.findAll({
        include: [Viagem],
        include: [Estado], 
        include:[{
                model: Partida,
                as:'pp',
                attributes:['designacao']
            },
            {model: Chegada, 
                as:'pc',
                attributes:['designacao']}],
        include: [{
            model: Pessoa,
            attributes:['p_nome', 'u_nome']}],
        where:{ 
            estado : "3",
        },
            order :[[ 'id', 'asc' ]],

    })
    .then(function (data) {
        return data;
    })
    .catch(error => {
        console.log('Erro: ' + error);
        return error;
    });
    res.json({success: true, data: data});

}

module.exports = op_pagamentos;

模型pedido_viagem:

var Sequelize = require('sequelize');
var sequelize = require('./database');
var Municipe = require('./pessoa');
var Estado  = require('./estado_pedido');
var Partida  = require('./freguesias');
var Chegada  = require('./freguesias');


var pedido_viagem = sequelize.define('pedido_viagem',{
    id:{
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true,
    },
    municipe:{
        type: Sequelize.INTEGER,
        references:{
            model:Municipe,
            key:'id'
        },
        allowNull:false  // coloca variável NOT NULL
    },

    partida:{
        type: Sequelize.INTEGER,
        references:{
            model:Partida,
            key:'id'
        },
        allowNull:false  // coloca variável NOT NULL
    },
    chegada:{
        type: Sequelize.INTEGER,
        references:{
            model:Chegada,
            key:'id'
        },
        allowNull:false  // coloca variável NOT NULL
    },
    data_viagem: {
        type:Sequelize.DATE,
        allowNull:false  // coloca variável NOT NULL
    },
    hora_viagem:{
        type:Sequelize.TIME,
        allowNull:false  // coloca variável NOT NULL
    },
    aceita_partilha:{
        type:Sequelize.INTEGER,
        allowNull:false  // coloca variável NOT NULL
    },
    necessidades_especiais: {
        type:Sequelize.INTEGER,
        allowNull:false  // coloca variável NOT NULL
    },
    bagagem: {
        type:Sequelize.INTEGER,
        allowNull:false  // coloca variável NOT NULL
    },
    estado:{
        type:Sequelize.INTEGER,
        references:{
            model: Estado,
            key:'id'
        }
    }
},
{
    timestamps: false,
    freezeTableName: true
});

pedido_viagem.belongsTo(Municipe,{foreignKey:'municipe'});
pedido_viagem.belongsTo(Partida,{as:'pp',foreignKey:'partida'});
pedido_viagem.belongsTo(Chegada,{as:'pc',foreignKey:'chegada'});

module.exports= pedido_viagem;

模型狂热:

var Sequelize = require('sequelize');
var sequelize = require('./database');
var tipo_freguesia = require('./tipo_frequesia');;

var freguesia = sequelize.define('freguesias',{
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    designacao: {
         type:Sequelize.CHAR(50),
         allowNull:false  // coloca variável NOT NULL
    },   
    localizacao: {
        type: Sequelize.CHAR(100),
        allowNull:false // coloca variável NOT NULL
    },
    zona: {
        type:Sequelize.INTEGER,
        allowNull:false  // coloca variável NOT NULL
    },
    tipo_freguesia:{
        type: Sequelize.INTEGER,
        regerences:{
            model:tipo_freguesia,
            key:'id'
        },
        allowNull:false  // coloca variável NOT NULL
    }
},
{
 timestamps: false,
 freezeTableName: true,
});

module.exports = freguesia;

日志文件:

enter image description here

Node.js日志:
enter image description here

请,如果有人可以帮助我,非常感谢。我是一个初学者,我不明白为什么会收到此错误。

向所有人致意。

1 个答案:

答案 0 :(得分:1)

问题出在这里:

include: [Viagem],
        include: [Estado], 
        include:[{
                model: Partida,
                as:'pp',
                attributes:['designacao']
            },
            {model: Chegada, 
                as:'pc',
                attributes:['designacao']}],
        include: [{
            model: Pessoa,
            attributes:['p_nome', 'u_nome']}]

您正在覆盖include,它将决定仅使用最后一个,而应使用include作为数组:

include: [Viagem,  Estado, {
                model: Partida,
                as:'pp',
                attributes:['designacao']
            },
            {model: Chegada, 
                as:'pc',
                attributes:['designacao']},  {
            model: Pessoa,
            attributes:['p_nome', 'u_nome']}]