TypeError:invNum.next不是函数

时间:2019-08-13 04:22:52

标签: node.js promise

我已经尝试过此代码:

const invNum = require('invoice-number');

router.post('/checkout', async (req, res, next) => {

if (!req.session.cart) {
    return res.redirect('/pos/');
}

var saleList = Sale.find().sort({ _id: -1 }).limit(1); // removed (err, data)=>{} to simply view it is working tested already
var settings = await Setting.find({}); // removed try and catch to simply view it is working tested already
var ticketNumber;

ticketNumber = !saleList ? invNum.next('0000000') : invNum.next(saleList.ticket_number);

var sale = new Sale({
    ticket_number:ticketNumber,
    cart: req.session.cart,
    created_at: new Date()
});

sale.save((err, product) => {
    createReceipt(settings, req.session.cart, "receipts/"+ticketNumber+".pdf");
    req.session.cart = null;
    res.redirect('/pos/');
});

});

我收到此错误:

TypeError: invNum.next is not a function

问题出在invNum.next()。 invNum.next()是一个Node.js模块,用于生成从npm顺序安装的发票编号。

示例:

invNum.next('2017/08/ABC001')
// => 2017/08/ABC002

我已经尝试通过Promises或等待异步功能来尝试获取以前的stackoverflow帖子中的建议,以使此代码正常工作。希望您可以提供帮助或建议。谢谢。

3 个答案:

答案 0 :(得分:1)

发票编号模块的版本存在问题。在npm中显示为1.0.6,但在GitHub存储库中,package.json文件中包含1.0.5。 https://github.com/amindia/invoice-number

我已经从Github存储库中获取了此模块的测试,并且工作正常。 请从给定的链接中获取此模块的源代码,它将正常工作。

答案 1 :(得分:0)

  

我收到此错误:

TypeError: invNum.next is not a function UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch()

在invNum上使用console.log时,输出是什么?

还可以使用try catch并在内部使用inwait调用invNum.next。也许此函数内部发生了错误。

编辑:正如jfriend00所说,如果纯文本(例如您的“ 0000 ...”)正在运行,则可能saleList返回了一些错误,您没有捕获或处理该错误。

Edit2:此NPM代码的最新更新是1年前,使用此lib的人较少,很可能已损坏。

有一部分来自lib的index.js的代码:

function _next (invoiceNumber) { 
if (!invoiceNumber) 
throw new Error('invoiceNumber cannot be empty') 
var array = invoiceNumber.split(/[_/:\-;\\]+/) 
var lastSegment = array.pop() 
var priorSegment = invoiceNumber.substr(0, invoiceNumber.indexOf(lastSegment))
var nextNumber = alphaNumericIncrementer(lastSegment)
return priorSegment + nextNumber}

var api = { next: _next} 

module.exports = api

答案 2 :(得分:0)

似乎是模块中的某些错误。我在RunKit上尝试了以下代码片段 https://runkit.com/embed/ws2lv1y38mt4

var invNum = require('invoice-number')
try{
 invNum.next('sdfsd1')
} catch(e){
console.log(e)
}

遇到相同的错误