#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";
, я подозреваю, что первый импортирует модуль, тогда как второй импортирует функцию… Это единственное объяснение, которое я могу придумать, и я, вероятно, ошибаюсь…