Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未将JSON对象传递给函数_Json_Node.js_Asynccallback - Fatal编程技术网

未将JSON对象传递给函数

未将JSON对象传递给函数,json,node.js,asynccallback,Json,Node.js,Asynccallback,我有一个允许上传csv文件的应用程序,通过csvtojson将csv转换为json,然后通过mongoose将json导入mongo db 这绝大多数都是可行的,但由于某些原因,我无法让导入脚本动态地获取新生成的json,但如果我硬编码json的路径,就可以了 我有一个转换脚本,它看起来像这样,并且似乎正确地完成了它的工作(即,在上载文件时调用它,将csv转换为json,然后删除上载的csv) 我有一个upload.js路由调用这个函数 var express = require("expres

我有一个允许上传csv文件的应用程序,通过csvtojson将csv转换为json,然后通过mongoose将json导入mongo db

这绝大多数都是可行的,但由于某些原因,我无法让导入脚本动态地获取新生成的json,但如果我硬编码json的路径,就可以了

我有一个转换脚本,它看起来像这样,并且似乎正确地完成了它的工作(即,在上载文件时调用它,将csv转换为json,然后删除上载的csv)

我有一个upload.js路由调用这个函数

var express = require("express");
var multer = require('multer');
var router = express.Router();
var path = require('path');
var runScript = require('../helpers/runScript');
var convertJSON = require('../helpers/convertJSONOriginal');
var upload = require('../helpers/statement-seeder');

/*
  The below hardcoded path will allow the call to console.log('AND THIS 
 WITH statements '+JSON.stringify(statements));
  to print out an object
*/

 var statements= require("../data/HSBC-1493565387017.json");

var storage = multer.diskStorage({
  destination: function(req, file, callback) {
      callback(null, './data')
  },
  filename: function(req, file, callback) {
    callback(null, req.body.bank + '-' + Date.now() + 
path.extname(file.originalname))

  }
});


router.post('/',
  multer({
      storage: storage,
      fileFilter: function(req, file, callback) {
          var ext = path.extname(file.originalname)
          if (ext !== '.csv') {
              return callback(res.end('Only csvs are allowed'), null)
          }
          callback(null, true)
      }
  })
      .single('statement'), //this is the name of the form field to get the file from
function(req, res) {
    console.log('THIS IS THE FILENAME - '+req.file.filename);
    convertJSON.convertJSON(req.file.filename, function(err, filename){
        if (err){
            console.log(err);
        } else {
            //prints out AND THIS WITH ../data "../data/HSBC-1493565431073.json" to console

console.log('THIS IS WITH ../data '+JSON.stringify('../data/'+filename));
            //prints out AND THIS WITH data "/data/HSBC-1493565431073.json" to console

 console.log('AND THIS WITH /data '+JSON.stringify('/data/'+filename));
            //prints out AND THIS WITH ./data "./data/HSBC-1493565431073.json" to console

 console.log('AND THIS WITH ./data '+JSON.stringify('./data/'+filename));
            //prints out the json object to console

 console.log('AND THIS WITH statements '+JSON.stringify(statements));
            //upload.statementSeeder(filename);
            //upload.statementSeeder(statements);

        }
    });

});

module.exports = router;
因此,如果我从硬编码的
var statements=require(../data/HSBC-1493535387017.json)中输入“console.log(statements)”(其中../data/HSBC-1493535387017.json是一个通过我编写的代码上传和转换的文件),然后我看到完整的json对象,但是如果我从给回调的值中选择console.log,那么它只打印文件的路径

谁能告诉我我做错了什么

在回答问题时编辑: 查看
filename
(这是从JSON转换脚本传回的
req.file.filename
,如果我的想法/代码正确,上面上传的每个文件的类型都不同)
console.log('这里是文件名的TYPEOF'+文件名的TYPEOF)返回
字符串

但是
console.log('这里是语句的类型'+语句的类型')其中,
语句
硬编码到一个转换的json文件的实际位置
var statements=require(“../data/HSBC-1493535387017.json”)
返回
object

好的,我已经在convertjson脚本中添加了以下内容,现在它将打开的json文件作为对象传递给回调函数

 var obj;
 fs.readFile('./data/' + inputFile.split('.')[0] + '.json', 'utf8', 
     function (err, data) {
       if (err) throw err;
         obj = JSON.parse(data);
                //console.log(obj);
                callback(err,obj);
       });

请尝试控制台类型的语句。。如果您想读取文件内容,可以使用fs模块..@thedarkcoder谢谢。我已经对我的问题进行了编辑。获取动态生成的文件名时,
的类型是
字符串
,而对于硬编码的文件名,类型是
对象
。但我不明白他们的演员阵容有什么不同
 var obj;
 fs.readFile('./data/' + inputFile.split('.')[0] + '.json', 'utf8', 
     function (err, data) {
       if (err) throw err;
         obj = JSON.parse(data);
                //console.log(obj);
                callback(err,obj);
       });