【问题标题】:TypeError: Cannot read property 'name' of null NodeJsTypeError:无法读取空 NodeJs 的属性“名称”
【发布时间】:2020-07-16 14:03:43
【问题描述】:

我正在NodeJs 上学习和试验。我正在使用request-promiseNodeJs 调用另一个api。我正在使用form-data 创建一个表单并将其发送到另一个 api。 我的sn-p:

const requestPromise = require('request-promise');
const FormData = require('form-data');
....

var sendToAPI = async (fileObjBuffer, myId, timestamp) => {

    let formData = new FormData();
    formData.append('fileData', fileObjBuffer);
    formData.append('myId', myId);
    formData.append('fileName', timestamp);

    let options = {
        method: 'POST',
        uri: '<URL>',
        formData: formData,
        headers: {
            'Access-Control-Allow-Origin': '*',
            'enctype': 'multipart/form-data',
            'Content-Type': 'application/json',
            'Access-Control-Allow-Methods': 'GET,POST,OPTIONS,DELETE,PUT'
        },
        json: true
    };
    try {
        let apiResult = await requestPromise(options).promise();
        console.log('\n\napiResult: ', apiResult);
    } catch (error) {
        console.log('error in sending to api: ',error);
    } 
}

var fetchAllData = async () => {
    let query = 'select * from demo_db.demo_table;';
    let fileObject = "";
    var result;
    try {
        //cassandra query
        result = await client.execute(query, [], { prepare: true });
    } catch (error) {
        console.log('error in fetching data from Cassandra: ',error);
    }
    result.rows.forEach(resultObj => {
        fileObject = fileObject +resultObj['room_id'] +":"+resultObj['message_id']+":"+resultObj['original_message'] +":"+resultObj['send_date'] +":"+  resultObj['sender'] +"%";
    });
    let fileObjBuffer = new Buffer(fileObject);
    let myId = uuidv4();
    let timestamp = date.format(new Date(), 'YYYYMMMDDhhmmss', false);  
    sendToAPI(fileObjBuffer,myId,timestamp);
}

我的错误:

error in sending to api:  TypeError: Cannot read property 'name' of null
at FormData._getContentDisposition (/home/bhushan/NodeJS-Scheduler/node_modules/request/node_modules/form-data/lib/form_data.js:226:40)
at FormData._multiPartHeader (/home/bhushan/NodeJS-Scheduler/node_modules/request/node_modules/form-data/lib/form_data.js:177:33)
at FormData.append (/home/bhushan/NodeJS-Scheduler/node_modules/request/node_modules/form-data/lib/form_data.js:70:21)
at appendFormValue (/home/bhushan/NodeJS-Scheduler/node_modules/request/request.js:326:21)
at Request.init (/home/bhushan/NodeJS-Scheduler/node_modules/request/request.js:337:11)
at Request.RP$initInterceptor [as init] (/home/bhushan/NodeJS-Scheduler/node_modules/request-promise-core/configure/request2.js:45:29)
at new Request (/home/bhushan/NodeJS-Scheduler/node_modules/request/request.js:127:8)
at request (/home/bhushan/NodeJS-Scheduler/node_modules/request/index.js:53:10)
at sendToAPI (/home/bhushan/NodeJS-Scheduler/schedulerTest.js:52:25)
at fetchAllData (/home/bhushan/NodeJS-Scheduler/schedulerTest.js:95:2)
at process._tickCallback (internal/process/next_tick.js:68:7)

请帮我解决这个问题。

【问题讨论】:

  • 您粘贴的代码不包含错误部分。错误指出name of null 表示您正在尝试访问可能是对象或数组的null 的名称,因此请粘贴您的完整代码,否则会很困难
  • @Subburaj,我刚刚编写了另一个简单的函数fetchAllData 来创建fileNamemyIdfileObjBuffer 值,然后从fetchAllData 调用sendToAPI()
  • 嗨,@VictorF,我看过这篇文章,但我不明白,如何在我的情况下实现它。
  • 这是你的全部代码吗?

标签: node.js multipartform-data form-data request-promise


【解决方案1】:

request-promise 在内部处理 form-data。因此无需显式使用form-data。相反,我通过以下方式制作了普通对象:

var formData = {
    fileData: {
        value: fileObjBuffer,
        filename: timestamp
    },
    fileName: timestamp,
    myId: myId
}

【讨论】:

    【解决方案2】:

    出现这个问题是因为在 requestPromise 方法的 formData 键中,您实际上不需要传递 formData 而是一个对象。

    request-promise 在内部根据传递的对象创建 formData。

    let formData = {
      fileData: fileObjBuffer,
      fileName: timestamp,
      myId: myId
    }
    
    let options = {
        method: 'POST',
        uri: '<URL>',
        formData: formData, // formData here is an object
        headers: {
            'Access-Control-Allow-Origin': '*',
            'enctype': 'multipart/form-data',
            'Content-Type': 'application/json',
            'Access-Control-Allow-Methods': 'GET,POST,OPTIONS,DELETE,PUT'
        },
        json: true
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2021-11-13
      • 2022-01-14
      • 2022-06-22
      • 2015-10-16
      相关资源
      最近更新 更多