我已经尝试过此代码:
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帖子中的建议,以使此代码正常工作。希望您可以提供帮助或建议。谢谢。
答案 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)
}
遇到相同的错误