You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS+Lex开发存数据到DynamoDB遇Promisify is not a function错误

解决"Promisify is not a function"错误

你遇到的问题主要是es6-promisify的导入方式不正确,或者也可以直接改用Node.js内置的工具方法来避免第三方包的依赖问题。我给你整理了两种可行的解决方案:

方案1:修正es6-promisify的导入方式

es6-promisify的默认导出是promisify函数,但在Node.js的CommonJS语法(require)中,你需要显式获取它的default属性才能正确使用。修改你的导入代码:

const promisify = require('es6-promisify').default;

这样就能正确拿到promisify函数,不会再出现"is not a function"的报错了。

方案2:改用Node.js内置的util.promisify(推荐)

从Node.js v8.0.0开始,util模块就内置了promisify方法,完全不需要依赖第三方包,更稳定也符合Node.js的标准用法。具体步骤如下:

  1. 替换导入语句,移除es6-promisify的依赖:
const { promisify } = require('util');
  1. 另外,你的代码里还有一个小问题:catch块里的Promise.reject(error)没有返回值,会导致错误被静默吞掉,应该改为return Promise.reject(error)或者直接throw error。

修改后的完整代码:

'use strict';
const uuidV1 = require('uuid/v1');
const AWS = require('aws-sdk');
const { promisify } = require('util'); // 改用内置util的promisify

const dynamo = new AWS.DynamoDB.DocumentClient();

module.exports.saveBookingToDatabase = function(Arrival_city, Departure_city, Flight_type, Phone_number){
    console.log('saveBookingToDatabase');
    const item = {};
    item.bookingId = uuidV1();
    item.arrivalCity = Arrival_city;
    item.departureCity = Departure_city;
    item.classType = Flight_type;
    item.phone = Phone_number;

    const params = {
        TableName: 'airstallion',
        Item: item
    };

    const putAsync = promisify(dynamo.put, dynamo);
    return putAsync(params)
        .then(() => {
            console.log(`Saving ticket ${JSON.stringify(item)}`);
            return item;
        })
        .catch(error => {
            return Promise.reject(error); // 必须返回,避免错误丢失
            // 或者直接写 throw error;
        });
}

如果你的Node.js版本在v10及以上,还可以用async/await让代码更简洁易读:

'use strict';
const uuidV1 = require('uuid/v1');
const AWS = require('aws-sdk');
const { promisify } = require('util');

const dynamo = new AWS.DynamoDB.DocumentClient();
const putAsync = promisify(dynamo.put, dynamo);

module.exports.saveBookingToDatabase = async function(Arrival_city, Departure_city, Flight_type, Phone_number){
    console.log('saveBookingToDatabase');
    const item = {
        bookingId: uuidV1(),
        arrivalCity: Arrival_city,
        departureCity: Departure_city,
        classType: Flight_type,
        phone: Phone_number
    };

    const params = {
        TableName: 'airstallion',
        Item: item
    };

    try {
        await putAsync(params);
        console.log(`Saving ticket ${JSON.stringify(item)}`);
        return item;
    } catch (error) {
        console.error('Error saving booking:', error);
        throw error;
    }
}

内容的提问来源于stack exchange,提问作者Tayyab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:27:52