Maison > Questions et réponses > le corps du texte
J'ai une question sur une application que je crée, j'utilise une base de données Oracle et j'obtiens des informations de la base de données et je les présente à l'écran via un tableau, mais je veux essayer de traiter les données individuellement, comme créer un paragraphe et afficher une valeur.
Je ne peux présenter les données que sous forme de tableaux, existe-t-il un autre moyen ? Si quelqu'un peut m'aider, merci beaucoup.
J'accepte tous les conseils pour améliorer le code.
Mon Index.htmlpage
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Apontamentos da Produção</title> <link rel="stylesheet" type="text/css" href="styles.css" media="screen" /> </head> <body> <meta http-equiv="refresh" content="5"> <div id="data"></div> <div class="grid-container"> <div class="container"> <div class="texto"> PAINEL-1 | APONTAMENTOS DA PRODUÇÃO</div> <div class="clock"></div> </div> </div> <div class="progress"> <div class="progress-bar"></div> </div> <br> <!-- Tabela principal, apresentando os apontamentos --> <table id="table" class="tablePrincipal"> <tr class="trPrincipal"> <th class="th2" style="width: 11%;">Data</th> <th class="th2" style="width: 8%; ">Hora</th> <th class="th2" style="width: 5%;">Orig.</th> <th class="th2" style="width: 8%;">O.P.</th> <th class="th2" style="width: 10%;">Produto</th> <th class="th2" style="width: 8%;">Deriv.</th> <th class="th2" style="width: 9%;">Peso (TN)</th> <th class="th2" style="width: 7%;">Refugo (TN)</th> <th class="th2" style="width: 13%;">Lote</th> <th class="th2" style="width: 60%;;">Operador</th> </tr> </table> <br> </body> <script> // Tabela de apontamentos. Listagem. // Aqui é onde é feito o push de informações, chamando pelo caminho e colocando o ID da tabela que ele vai levar as informações window.onload = function () { fetch('http://localhost:3000/teste') .then(response => response.json()) .then(data => { console.log(data); var table = document.getElementById('table'); // Primeiro define a variavel, e coloca o comando para inserir uma linha, é tudo organizado por rows for (var i = 0; i < 7; i++) { var row = table.insertRow(i + 1); var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); var cell3 = row.insertCell(2); var cell4 = row.insertCell(3); var cell5 = row.insertCell(4); var cell6 = row.insertCell(5); var cell7 = row.insertCell(6); var cell8 = row.insertCell(7); var cell9 = row.insertCell(8); var cell10 = row.insertCell(9); // Queria trabalhar com os dados separadamente, tentar criar um <p> e colocar um dado para apresentar. // Queria tentar fazer um calculo com essa variável, mas não funciona assim var cell11 = cell7 * 2; // Aqui chama a variavel e coloca a linha na tabela cell1.innerHTML = data[i][0]; cell2.innerHTML = data[i][1]; cell3.innerHTML = data[i][2]; cell4.innerHTML = data[i][3]; cell5.innerHTML = data[i][4]; cell6.innerHTML = data[i][5]; cell7.innerHTML = data[i][6]; cell8.innerHTML = data[i][7]; cell9.innerHTML = data[i][8]; cell10.innerHTML = data[i][9]; }} )} </script> </html>
C'est mon Index.js où je fais des sélections et envoie des données
const express = require('express'); const oracledb = require('oracledb'); const app = express(); var cors = require('cors') app.use(cors()) const http = require('http'); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); // Connection details for the Oracle database const connectionString = ''; const user = ''; const password = ''; // Connect to the database app.get('/teste', (req, res) => { // within the endpoint, query the database oracledb.getConnection( { connectionString: connectionString, user: user, password: password }, function teste(err, connection) { if (err) { console.error(err.message); return; } console.log('Conexão deu certo!'); const query = 'SELECT DATREA,HORREA,CODORI,NUMORP,CODPRO,CODDER,QTDRE1,QTDRFG,CODLOT,OPERADOR from USU_VPROEXT ORDER BY DATREA DESC, HORREA DESC'; connection.execute(query, [], (err, result) => { if (err) { console.error(err.message); return; } console.log('Banco de Dados Atualizado'); console.log(); // return the results to the user res.json(result.rows); }); }); }); app.listen(3000, () => { console.log('Server is listening on port 3000'); });
P粉7060387412024-04-05 14:02:39
Comme je ne peux pas reproduire exactement le scénario, je vais me concentrer sur le côté client et prendre pour acquis que votre point de terminaison backend renverra correctement un tableau, par exemple : data[iRow][iColumn]
Une telle hypothèse vient de lignes comme celle-ci cell1.innerHTML = data[i][0];
Je ne sais pas vraiment si les données sont simplement un tableau de tableaux ou s'il existe un moyen d'adresser les valeurs de colonne par nom de colonne. Quoi qu'il en soit, nous nous en tiendrons ici au paradigme du tableau simple, car il semble fonctionner selon vos propres mots.
Ici, nous définissons un data
tableau avec 2 lignes et 10 colonnes chacune :
//the array you are supposed to receive from your ajax call const data = [ //first row of cells [ 'rowX_cell(01)', 'rowX_cell(02)', 'rowX_cell(03)', 'rowX_cell(04)', 'rowX_cell(05)', 'rowX_cell(06)', 'rowX_cell(07)', 'rowX_cell(08)', 'rowX_cell(09)', 'rowX_cell(10)', ], //second row of cells [ 'rowY_cell(01)', 'rowY_cell(02)', 'rowY_cell(03)', 'rowY_cell(04)', 'rowY_cell(05)', 'rowY_cell(06)', 'rowY_cell(07)', 'rowY_cell(08)', 'rowY_cell(09)', 'rowY_cell(10)', ], ]
Je peux aussi dire l'ordre des colonnes récupérées dans la base de données depuis l'affichage de la requête SQL, voici la liste ordonnée :
DATREA、HORREA、CODORI、NUMORP、CODPRO、CODDER、QTDRE1、QTDRFG、CODLOT、OPERADOR
Nous le définissons comme un tableau de chaînes en js comme suit :
//ordered list of columns in the same order as the cols in data are supposed to be const columnNames = ['DATREA','HORREA','CODORI','NUMORP','CODPRO','CODDER','QTDRE1','QTDRFG','CODLOT','OPERADOR'];
Convertissez la ligne data
en un tableau d'objets ayant comme propriétés des lignes et des colonnes nommées d'après la liste de colonnes présentée précédemment :
function getRowObject(row){ const rowObject = {}; //for each col in columnNames columnNames.forEach((col, i)=>{ //set the prop of rowObject named as col = the value at the i position in row rowObject[col] = row[i]; }); return rowObject; }
Pour la première ligne de données (data[0]
), l'objet suivant sera renvoyé :
{ "DATREA": "rowX_cell(01)", "HORREA": "rowX_cell(02)", "CODORI": "rowX_cell(03)", "NUMORP": "rowX_cell(04)", "CODPRO": "rowX_cell(05)", "CODDER": "rowX_cell(06)", "QTDRE1": "rowX_cell(07)", "QTDRFG": "rowX_cell(08)", "CODLOT": "rowX_cell(09)", "OPERADOR": "rowX_cell(10)" }
En fonction de vos objectifs spécifiques, vous disposez de moyens illimités pour y parvenir. Vous n'avez pas réellement besoin de convertir le tableau en objet en premier lieu, mais cela facilite l'accès à ses colonnes par leur nom plutôt que par l'utilisation de numéros d'index.
Quoi qu'il en soit, si par exemple vous devez afficher chaque ligne comme le contenu d'un seul paragraphe, avec la concaténation de toutes ses données de colonne comme contenu :
function appendRowsAsParagraphsInTarget(target, rowObjects){ //you can loop through all the rows and print them on screen rowObjects.forEach( row => { //here we are converting the row object back to a list of values values = columnNames.map( columnName => row[columnName] ); //here to a single string where values are separated by ', ' and wrapped in [] values = values.map( value => `[${value}]`); values = values.join(', '); //append the newly created p in target const p = document.createElement('p'); p.textContent = values; target.append(p); }); }
Voici une démonstration en direct de ce qui a été dit jusqu'à présent :
//the array you are supposed to receive from your ajax call
const data = [
//first row of cells
[
'rowX_cell(01)',
'rowX_cell(02)',
'rowX_cell(03)',
'rowX_cell(04)',
'rowX_cell(05)',
'rowX_cell(06)',
'rowX_cell(07)',
'rowX_cell(08)',
'rowX_cell(09)',
'rowX_cell(10)',
],
//second row of cells
[
'rowY_cell(01)',
'rowY_cell(02)',
'rowY_cell(03)',
'rowY_cell(04)',
'rowY_cell(05)',
'rowY_cell(06)',
'rowY_cell(07)',
'rowY_cell(08)',
'rowY_cell(09)',
'rowY_cell(10)',
],
]
//ordered list of columns in the same order as the cols in data are supposed to be
const columnNames = ['DATREA','HORREA','CODORI','NUMORP','CODPRO','CODDER','QTDRE1','QTDRFG','CODLOT','OPERADOR'];
//transforming the original array of rows as array of objects where each one as col data as properties
const rowObjects = data.map( row => getRowObject(row) );
console.log(rowObjects);
//appending the rowObjects as p paragraph to #output_rows
const target = document.getElementById('output_rows');
appendRowsAsParagraphsInTarget(target, rowObjects);
function appendRowsAsParagraphsInTarget(target, rowObjects){
//you can loop through all the rows and print them on screen
rowObjects.forEach( row => {
//here we are converting the row object back to a list of values
values = columnNames.map( columnName => row[columnName] );
//here to a single string where values are separated by ', ' and wrapped in []
values = values.map( value => `[${value}]`);
values = values.join(', ');
//append the newly created p in target
const p = document.createElement('p');
p.textContent = values;
target.append(p);
});
}
function getRowObject(row){
const rowObject = {};
//for each col in columnNames
columnNames.forEach((col, i)=>{
//set the prop of rowObject named as col = the value at the i position in row
rowObject[col] = row[i];
});
return rowObject;
}
.label{
font-weight: bold;
}
#output_rows{
}
#output_rows > p{
border: solid 1px lightgray;
margin-bottom: 1em;
}
Showing all the table rows as p elements