收藏
回答

云函数调用node xlsx 报错 是版本问题吗? 这个要怎么改

换成用require('xlsx')后新的错变成
The Signature you specified is invalid.


uploadFile:fail -501001 resource system error. [SignatureDoesNotMatch]: The Signature you specified is invalid.
    at toSDKError (D:\Backup-STUDY-7-22-2018\xiaochengxu_project\mp-xiaofu\cloudfunctions\excel\node_modules\wx-server-sdk\index.js:8094:19)
    at Object.returnAsFinalCloudSDKError (D:\Backup-STUDY-7-22-2018\xiaochengxu_project\mp-xiaofu\cloudfunctions\excel\node_modules\wx-server-sdk\index.js:8065:12)
    at D:\Backup-STUDY-7-22-2018\xiaochengxu_project\mp-xiaofu\cloudfunctions\excel\node_modules\wx-server-sdk\index.js:2803:39
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

========================分割线=====================================

函数调用成功但是没有取到list,本地调试是这个错,重装了node xlsx还是有错

TypeError: Cannot read properties of undefined (reading 'length')
    at xlsx (mp-xxx\cloudfunctions\excel\node_modules\node-xlsx\lib\xlsx\xlsx.js:174:23)
    at Object.build (mp-xxx\cloudfunctions\excel\node_modules\node-xlsx\lib\node-xlsx.js:14:16)
    at d.exports.main [as handler] (mp-xxx\cloudfunctions\excel\index.js:57:29)
    at code\package.nw\js\common\cloud-functions-debugger-server\worker\node.js:1:44797
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
这个怎么debug, xlsx.js 174:23174行吗?

会是因为安装的时候“6 moderate severity vulnerabilities” 的问题吗?

index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
const moment = require("moment-timezone")
cloud.init({ 
  traceUser: true,
  env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境

//操作excel用的类库
//const xlsx = require('node-xlsx');
const xlsx = require('xlsx');
// 云函数入口函数
exports.main = async(event, context) => {
  try {
    let {userdata} = event
    
      // javascript date
    //  console.log(new Date()); // 2021-03-16T08:04:07.441Z (UTC+0
    //  console.log(moment().tz("Asia/Shanghai").format()); // 2021-03-16T16:04:07+08:00 (UTC+8)
    let curDate = moment().tz("Asia/Shanghai").format();
    //let curDate =new Date().toISOString()
    //1,定义excel表格名
    let dataCVS = 'xiaofu101_order_list_'+curDate+'.xlsx'
    //2,定义存储数据的
    let alldata = [];
    //let row = ['status','receiver']; //表属性
    let row=['_id' , 'orderDate', 'region','address','receiver','phone'
    ,'SchoolName','cloth_id','cloth_notes','num','cloth_price','totalPrice','status']

    alldata.push(row);

    for (let key in userdata) {
      
      for (let i in userdata[key]['product']){
        let arr = [];
        arr.push(userdata[key]._id);
        arr.push(userdata[key].orderDate);
        arr.push(userdata[key]['address'].region[0]+'-'
        +userdata[key]['address'].region[1]+'-'
        +userdata[key]['address'].region[2]);
        arr.push(userdata[key]['address'].address);
        arr.push(userdata[key]['address'].receiver);
        arr.push(userdata[key]['address'].phone);
        arr.push(userdata[key].curSchoolName);
        arr.push(userdata[key]['product'][i].cloth_id);
        arr.push(userdata[key]['product'][i].cloth_notes);
        arr.push(userdata[key]['product'][i].cloth_price);
        arr.push(userdata[key]['product'][i].num);
        arr.push(userdata[key].totalPrice);
        arr.push(userdata[key].status);
        alldata.push(arr)
      }
    }
    //console.log(alldata)
    //3,把数据保存到excel里
    //var buffer = await xlsx.build([{
    //  name: "mySheetName",
    //  data: alldata
   // }]);
   // console.log('buffer have data : '+buffer);
    //4,把excel文件保存到云存储里
   // return await cloud.uploadFile({
   //   cloudPath: dataCVS,
   //   fileContent: buffer, //excel二进制文件   
   // })
    const buffer = xlsx.utils.book_new();
    const worksheet = xlsx.utils.aoa_to_sheet(alldata);
    xlsx.utils.book_append_sheet(buffer, worksheet, 'mySheetName');
    const excelBuffer = xlsx.write(buffer, { type: 'buffer' });
    //console.log('buffer has data : ', excelBuffer);
    //4,把excel文件保存到云存储里
    console.log(dataCVS)
    return await cloud.uploadFile({
      cloudPath: dataCVS,
      fileContent: excelBuffer, //excel二进制文件
      
    })

  } catch (e) {
    console.error(e)
    return e
  }
}



最后一次编辑于  2023-08-05
回答关注问题邀请回答
收藏

1 个回答

  • Mr.Zhao
    Mr.Zhao
    2023-08-04

    点进去看看这行代码是啥,猜测是参数问题

    2023-08-04
    有用
    回复 4
    • 小玉
      小玉
      2023-08-04
      非常感谢,菜鸟问题 174:23是什么意思?里面有很多length.
      另外,这个xlsx是跟着包来的,在装moment 和修vulnerability之前都没问题,能随便改吗?
      2023-08-04
      回复
    • 小玉
      小玉
      2023-08-04
      line 174 是这样
      2023-08-04
      回复
    • 小玉
      小玉
      2023-08-04
      发现是file.worksheets.length的问题 但是 file是传进去东西的 那就是没有worksheets 但这个应该是啥呢?
      2023-08-04
      回复
    • Mr.Zhao
      Mr.Zhao
      2023-08-05回复小玉
      还是用node-xlsx 用对少的代码去复现问题
      2023-08-05
      回复
登录 后发表内容