繁体   English   中英

(WebPack) TypeError: Object is not a function or its return value is not iterable

[英](WebPack) TypeError: Object is not a function or its return value is not iterable

我有这个 function buildUpdateExpression ,我在以下Serverless处理程序中使用它,并且 Webpack 返回一个TypeError ,如上所示,与所述 ZC1C425268E68385D1AB45074C17A94 直接相关...

TypeError: Object is not a function or its return value is not iterable
    at .../update-user.js:7:80
    at .../handler-lib.js:4:19

1 import handler from "./libs/handler-lib";
2 // import dynamoDb from "./libs/dynamodb-lib";
3 import buildUpdateExpression from "./libs/utility-lib";
4 export const main = handler(async (event, context) => {
5  const data = JSON.parse(event.body);
6  const validExpressionAttributes = ["bio", "location", "profile-picture-link", "website"];
7  const [updateExpression, expressionAttributeValues] = buildUpdateExpression(validExpressionAttributes, data);
  return {
    updateExpression: updateExpression,
    expressionAttributeValues: expressionAttributeValues
  };
  // const params = {
  //   TableName: process.env.userTableName,
  //   Key: {
  //     "userId": event.requestContext.identity.cognitoIdentityId
  //   },
  //   ConditionExpression: "userId = :userIdVal",
  //   UpdateExpression: updateExpression,
  //   ExpressionAttributeValues: expressionAttributeValues,
  //   ReturnValues: "UPDATED_NEW"
  // };
  // await dynamoDb.update(params);
  // return params.Item;
});
>> libs/utility-lib.js
export function buildUpdateExpression(validExpressionAttributes, data) {
  const dataLength = Object.keys(data).length;
  let updateExpression = "set ";
  let expressionAttributeValues = {};
  for(let i = 0; i < validExpressionAttributes.length; i += 1) {
    let attribute = validExpressionAttributes[i];
    if(attribute in data) {
      let valueKey = ":" + attribute + "Val";
      expressionAttributeValues[valueKey] = data[attribute];
      updateExpression += attribute + " = " + valueKey;
      if(i < validExpressionAttributes.length - 1 && i < dataLength - 1) {
        updateExpression += ", ";
      }
    }
  }
  return [updateExpression, expressionAttributeValues];
};

当我进行npm test

import { buildUpdateExpression } from "../libs/utility-lib";
test("buildUpdateExpression (1)", () => {
  // Input variables
  const validExpressionAttributes = ["a", "b", "c"];
  const data = {
    a: 1,
    b: 2,
    c: 3
  };
  // Expected output variables
  const expectedUpdateExpression = "set a = :aVal, b = :bVal, c = :cVal";
  const expectedExpressionAttributeValues = {
    ":aVal": 1,
    ":bVal": 2,
    ":cVal": 3,
  };
  const [updateExpression, expressionAttributeValues] =
  buildUpdateExpression(validExpressionAttributes, data);
  expect(updateExpression).toEqual(expectedUpdateExpression);
  expect(expressionAttributeValues).toEqual(expectedExpressionAttributeValues);
});
 PASS  tests/utility-lib.test.js
  ✓ buildUpdateExpression (1) (3ms)
  ✓ buildUpdateExpression (2)
  ✓ buildUpdateExpression (3) (1ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        1.597s
Ran all test suites.

这里可能是什么问题?

解决方法是import buildUpdateExpression from "./libs/utility-lib"; 您必须import { buildUpdateExpression } from "./libs/utility-lib"; 我的怀疑是前者导入了一个模块,而后者导入了 function ......这是我能想到的唯一解释,我可能错了......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM