Html 未处理的PromisejectionWarning、Express.js和Node.js

Html 未处理的PromisejectionWarning、Express.js和Node.js,html,node.js,express,server,node-modules,Html,Node.js,Express,Server,Node Modules,我对Node.js和Express.js完全陌生,一直在尝试通过一些示例将Shippo API集成到我的电子商务web应用程序中,但我遇到了一些错误,尽管我多次查看了代码,但还是无法解决 我得到了UnhandledPromisejectionWarning错误,从我在线阅读的内容来看,这意味着在我的代码中的某个地方有一个。然后,不包含catch或to-do的部分是请求返回的错误。任何帮助都将不胜感激 这是我的代码: var express=需要“express” var app=express

我对Node.js和Express.js完全陌生,一直在尝试通过一些示例将Shippo API集成到我的电子商务web应用程序中,但我遇到了一些错误,尽管我多次查看了代码,但还是无法解决

我得到了UnhandledPromisejectionWarning错误,从我在线阅读的内容来看,这意味着在我的代码中的某个地方有一个。然后,不包含catch或to-do的部分是请求返回的错误。任何帮助都将不胜感激

这是我的代码:

var express=需要“express” var app=express var http=require'http'; var Raven=需要“Raven”; var shippo=需要“shippoACCESS_令牌”; var引擎=需要“合并”; const bodyParser=需要“body-parser”; 常量路径=要求“路径”; app.usebodyParser.urlencoded{extended:true}; app.usebodyParser.json; app.engine'html',engines.mustache; 应用程序设置“查看引擎”、“html”; //app.useexpress.staticpath.join_dirname“/”; 应用程序获取“/”,函数请求,res{ res.render'Index.html'; } 应用程序post“/”,功能要求,res{ var addressFrom={ 目的:购买, 姓名:发件人姓名, 公司名称:Shippo, 街道1:215克莱顿街。, 城市:旧金山, 州:加利福尼亚州, 邮政编码:94117, 国家/地区:美国,//iso2国家/地区代码 电话:+15553419393, 电子邮件:发件人/电子邮件, }; //对象dict的示例地址 var addressTo={ 目的:购买, 名称:req.body.fnames+“”+req.body.lnames, 公司:req.body.company, 街道1:req.body.street, 城市:请求主体城市, 状态:req.body.state, zip:req.body.zipcode, 国家/地区:req.body.country,//iso2国家/地区代码 电话:+15553419393, 电邮:support@goshippo.com, }; //包裹对象记录 var parcelOne={ 长度:5, 宽度:5, 身高:5,, 距离单位:英寸, 体重:2, 质量单位:磅 }; var装运={ 目的:购买, 地址:addressFrom, 地址:地址:, 地块:[地块线], 提交类型:放弃 }; shippo.transaction.create{ 装运:装运, 服务级别\u令牌:ups\u标准, 承运商账户:“承运商代币”, 标签\文件\类型:PDF } .thenfunctiontransaction{ shippo.transaction.list{ 价格:交易价格 } .然后是功能转换{ mpsTransactions.results.foreach函数mpstransaction{ ifmpsTransaction.object_status==成功{ console.logLabel URL:%s,mpsTransaction.label\u URL; console.logTracking编号:%s,mpsTransaction.tracking\u编号; console.logE-Mail:%s,mpsTransaction.object\u所有者; console.logmpsTransaction.object\u状态; res.status200.sendLabel可在:+mpsTransaction.label\u url下找到; }否则{ //汉尔德错误事务 console.logMessage:%s,mpsTransactions.messages; } }; } },函数{ //处理错误 console.Log创建事务时出错:%s,err.detail; 发生了什么事:哦 }; } 应用程序post'/successp',功能请求,res{ var token=req.body.stripeToken;//使用Express //向用户的卡收费: var charge=stripe.charges.create{ 金额:1000, 货币:欧元, 说明:示例费用, 资料来源:token, },函数r,电荷{ //异步调用 }; 请发送“谢谢!” } 应用程序post'/successp',功能请求,res{ var token=req.body.stripeToken;//使用Express //向用户的卡收费: var charge=stripe.charges.create{ 金额:1000, 货币:欧元, 说明:示例费用, 资料来源:token, },函数r,电荷{ //异步调用 }; 请发送“谢谢!” } app.listen3000,函数{ console.log“端口3000上侦听的示例应用程序!”
} 使用格式thenFN,errorFn时需要小心一点,因为如果在then中有错误,errorFn将无法捕获它。最好使用n.catcherrorFn。这将允许上述任何一个捕获中的所有错误向下过滤到最后一个捕获进行处理

例如,第一个调用正确捕获了错误,第二个调用没有:

功能fn{ 还愿 } fn .thenr=>{ 发出呜呜声 } .catcherr=>console.logerr//{ 发出呜呜声 }, err=>console.logerr//这无法捕获上面的错误;它将只捕获fn上的拒绝
在没有阅读完整代码的情况下,您不应该试图在使用承诺时用回调函数捕获错误。您可以使用.catch块捕获承诺中的错误

您还应该返回第一个承诺,以便它传递给下一个。然后,如果您打算将shippo.transaction.list作为MPTransactions返回,则可以使用函数

大概是这样的:

 shippo.transaction.create({
 "shipment": shipment,
 "servicelevel_token": "ups_standard",
 "carrier_account": 'CARRIER_TOKEN',
 "label_file_type": "PDF"
})
  .then(function(transaction) {
      return shippo.transaction.list({
        "rate": transaction.rate
      })
   })
  .then(function(mpsTransactions) {
    mpsTransactions.results.forEach(function(mpsTransaction){
        if(mpsTransaction.object_status == "SUCCESS") {
            console.log("Label URL: %s", mpsTransaction.label_url);
            console.log("Tracking Number: %s", mpsTransaction.tracking_number);
            console.log("E-Mail: %s", mpsTransaction.object_owner);
            console.log(mpsTransaction.object_status);
            res.status(200).send("Label can be found under: " + mpsTransaction.label_url);
        } else {
            // hanlde error transactions
            console.log("Message: %s", mpsTransactions.messages);
        }
    });
   })
  .catch(function (error) {
    // Deal with an error
    console.log("There was an error creating transaction : %s", err.detail);
    res.send("something happened :O")
  });