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

时间:2015-12-19 21:54:11

标签: javascript node.js csv ibm-cloud

我正在使用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);
	
});
&#13;
&#13;
&#13;

数据库中所选公寓的列表应显示在此图片的最后一句下方。Page

1 个答案:

答案 0 :(得分:0)

我已将您的代码更新为:
  - 声明jade作为模板语言
  - 删除未使用的代码
  - 为dados实施字典比较   - CSV数据库的初始异步加载,请参阅load_csv_database
  - 使用Array.filterequal_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);
});