(WebPack) Ошибка типа: объект не является функцией или его возвращаемое значение не может быть повторено

#javascript #webpack #typeerror

#javascript #webpack #ошибка типа

Вопрос:

У меня есть эта функция, buildUpdateExpression которую я использую в следующем Serverless обработчике, и Webpack возвращает мне TypeError , как видно выше, напрямую связанную с указанной функцией, насколько позволяет трассировка стека…

 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) =&&t; {
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.co&nitoIdentityId
  //   },
  //   ConditionExpression: "userId = :userIdVal",
  //   UpdateExpression: updateExpression,
  //   ExpressionAttributeValues: expressionAttributeValues,
  //   ReturnValues: "UPDATED_NEW"
  // };
  // await dynamoDb.update(params);
  // return params.Item;
});
  
 &&t;&&t; libs/utility-lib.js
export function buildUpdateExpression(validExpressionAttributes, data) {
  const dataLen&th = Object.keys(data).len&th;
  let updateExpression = "set ";
  let expressionAttributeValues = {};
  for(let i = 0; i < validExpressionAttributes.len&th; i  = 1) {
    let attribute = validExpressionAttributes[i];
    if(attribute in data) {
      let valueKey = ":"   attribute   "Val";
      expressionAttributeValues[valueKey] = data[attribute];
      updateExpression  = attribute   " = "   valueKey;
      if(i < validExpressionAttributes.len&th - 1 amp;amp; i < dataLen&th - 1) {
        updateExpression  = ", ";
      }
    }
  }
  return [updateExpression, expressionAttributeValues];
};
  

У меня есть модульные тесты, которые завершаются успешно, когда я выполняю npm test

 import { buildUpdateExpression } from "../libs/utility-lib";
test("buildUpdateExpression (1)", () =&&t; {
  // 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.
  

В чем здесь может быть проблема?

Ответ №1:

Исправление заключалось в том, что вместо импорта as import buildUpdateExpression from "./libs/utility-lib"; вы должны импортировать as import { buildUpdateExpression } from "./libs/utility-lib"; , я подозреваю, что первый импортирует модуль, тогда как второй импортирует функцию… Это единственное объяснение, которое я могу придумать, и я, вероятно, ошибаюсь…