使用javascript分析csv数据库时出错

Error analysing the csv database with javascript

本文关键字:出错 数据库 csv javascript 分析 使用      更新时间:2023-09-26

我正在为学校做一个使用IBM的bluemix的项目,我很难找出我的错误在哪里。我有一个CSV数据库,里面有一些参数(街区、房间数量、面积(平方米)等)。我还有一个JADE文件,其中包含一个用户必须填写的表格。在这个表格中,用户将选择他想要的房间数量和其他一切。然后,我在JAVASCRIPT中的应用程序应该能够根据用户的选择运行数据库。然而,由于某种原因,结果没有出现在网页上。

这是我的代码:

/*eslint-env node*/
//------------------------------------------------------------------------------
// node.js starter application for Bluemix
//------------------------------------------------------------------------------
// This application uses express as its web server
// for more info, see: http://expressjs.com
var express = require('express');
// cfenv provides access to your Cloud Foundry environment
// for more info, see: https://www.npmjs.com/package/cfenv
var cfenv = require('cfenv');
var fs = require('fs');
var parse = require('csv-parse');
// create a new express server
var app = express();
function seleciona_dados(dados, parametros){
    var resultado = {Bairro: [], quartos: [], area: [], valor: [], endereco: [], img: []};
        for (var i = 1; i < dados.Bairro.length; i++){
            if (dados.Bairro[i] == parametros.bairro && dados.quartos[i] == parametros.quartos && dados.area[i] >= Number(parametros.area) && dados.valor[i] <= Number(parametros.valor)){
                resultado.bairro.push(dados.bairro[i]);
                resultado.quartos.push(dados.quartos[i]);
                resultado.area.push(dados.area[i]);
                resultado.valor.push(dados.valor[i]);
                resultado.endereco.push(dados.endereco[i]);
                resultado.img.push(dados.img[i]);
            }
        }
    return resultado;
}
// serve the files out of ./public as our main files
app.use(express.static(__dirname + '/public'));
// get the app environment from Cloud Foundry
var appEnv = cfenv.getAppEnv();
// start server on the specified port and binding host
app.listen(appEnv.port, '0.0.0.0', function() {
	// print a message when the server starts listening
  console.log("server starting on " + appEnv.url);
});
var bodyParser = require("body-parser");
 
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
 
app.get('/', function(req, res){
    res.render('cadastro.jade', {  pageTitle: 'Cadastro Usuário'});
});
app.post('/resumo', function(req, res){
    // var furfles = req.body;
    var parser = parse({delimiter: ';'}, function(err, data){
        var dados = {bairro: [], quartos: [], area: [], valor: [], endereco: [], img: []};
        for (var i = 1; i < data.length; i++){
            dados.bairro.push(data[i][0]);
            dados.quartos.push(data[i][1]);
            dados.area.push(Number(data[i][2]));
            dados.valor.push(Number(data[i][3]));
            dados.endereco.push(data[i][4]);
            dados.img.push(data[i][5]);
        }
        dados = seleciona_dados(dados, req.body);
        res.render('resumo.jade', {pageData:{  pageTitle: 'Resumo do Pedido do Usuário'}, formData: req.body, imoveis: dados});
    });
    fs.createReadStream(__dirname+'/static/BD.csv').pipe(parser);
	
});

数据库中选择的公寓列表应显示在该图像的最后一句下面。页面

您应该使用i=0而不是1来启动for循环。您丢失了前两条数据记录。

我已将您的代码更新为:
-将jade声明为模板语言
-删除未使用的代码
-为dados实现字典比较
-CSV数据库的初始异步加载,请参阅load_csv_database
-使用Array.filter和equal_to过滤数据库

/*jslint node: true */
'use strict';
// CONFIGURE EXPRESS
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));
app.set('view engine', 'jade');
// CONFIGURE EXPRESS
var cfenv = require('cfenv');
var appEnv = cfenv.getAppEnv();
var fs = require('fs');
var csvParse = require('csv-parse');
var database;
/**
 * Loads the CSV filename and parse it as JSON Object
 * @param  String filename The csv filename
 * @param  {Function} cb The callback
 */
function load_csv_database(filename, cb) {
  fs.createReadStream(filename).pipe(
    csvParse({ delimiter: ';' }, function(err, data) {
      if (err) {
        cb(err);
        return;
      } else {
        var result = {
          bairro: [],
          quartos: [],
          area: [],
          valor: [],
          endereco: [],
          img: []
        };
        data.forEach(function(e) {
          result.bairro.push(e[0]);
          result.quartos.push(e[1]);
          result.area.push(Number(e[2]));
          result.valor.push(Number(e[3]));
          result.endereco.push(e[4]);
          result.img.push(e[5]);
        });
        cb(null, result);
      }
    }));
}
// initial database async load
load_csv_database(__dirname + '/static/BD.csv', function(err, result) {
  if (!err)
    database = result;
  else
    console.log('error:', err);
});
function equal_to(origin) {
  return function compareTo(target) {
    for (var p in origin) {
      if (origin.hasOwnProperty(p)) {
        if (origin[p] !== target[p]) {
          return false;
        }
      }
    }
    for (var p2 in target) {
      if (target.hasOwnProperty(p2)) {
        if (origin[p2] !== target[p2]) {
          return false;
        }
      }
    }
    return true;
  };
}
app.get('/', function(req, res) {
  res.render('cadastro', { pageTitle: 'Cadastro Usuário' });
});
app.post('/resumo', function(req, res) {
  // use the global variable "database"
  var result = database.filter(equal_to(req.body));
  res.render('resumo.jade', {
    pageData: { pageTitle: 'Resumo do Pedido do Usuário' },
    formData: req.body,
    imoveis: result
  });
});
app.listen(appEnv.port, '0.0.0.0', function() {
  console.log('server starting on ' + appEnv.url);
});