2017-02-14 44 views
1

我正在构建一个API,今天我将我与HTML表单集成。然而,它只是说'不能POST /新船'。哪里不对? 我server.js:使用Shippo的节点运输API不起作用

var express = require('express') 
var app = express() 
var http = require('http'); 
//Shippo shipping wrapper 
var Raven = require('raven'); 
var shippo = require('shippo')('shippo_test_key'); 
const bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 
//Test 

app.get('/', function (req, res) { 
    res.send('Hello World! ' + 'hey') 
}) 
app.post('/newship/', function (req, res) { 

    var addressFrom = { 
     "object_purpose":"PURCHASE", 
     "name": Mr Shippotester, 
     "company":"Shippo", 
     "street1":"215 Clayton St.", 
     "city":"San Francisco", 
     "state":"CA", 
     "zip":"94117", 
     "country":"US", //iso2 country code 
     "phone":"+1 555 341 9393", 
     "email":"[email protected]", 
    }; 

    // example address_to object dict 
    var addressTo = { 
     "object_purpose":"PURCHASE", 
     "name": req.body.fnames + ' ' + req.body.lnames, 
     "company": req.body.company, 
     "street1":req.body.street, 
     "city":req.body.city, 
     "state":req.body.state, 
     "zip":req.body.zipcode, 
     "country": req.body.country, //iso2 country code 
     "phone":"+1 555 341 9393", 
     "email":"[email protected]", 
    }; 

    // parcel object dict 
    var parcelOne = { 
     "length":"5", 
     "width":"5", 
     "height":"5", 
     "distance_unit":"in", 
     "weight":"2", 
     "mass_unit":"lb" 
    }; 


    var shipment = { 
     "object_purpose": "PURCHASE", 
     "address_from": addressFrom, 
     "address_to": addressTo, 
     "parcel": [parcelOne], 
     "submission_type": "DROPOFF" 
    }; 

    shippo.transaction.create({ 
     "shipment": shipment, 
     "servicelevel_token": "dhl_express_domestic_express_doc", 
     "carrier_account": "account_id", 
     "label_file_type": "png" 
    }) 
    .then(function(transaction) { 
     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); 
       } 
      }); 
     }) 
    }, function(err) { 
     // Deal with an error 
     console.log("There was an error creating transaction : %s", err.detail); 
     res.send("something happened :O") 
    }); 
}) 
app.post('/successp', function (req, res) { 

    var token = req.body.stripeToken; // Using Express 
    // Charge the user's card: 
var charge = stripe.charges.create({ 
    amount: 1000, 
    currency: "eur", 
    description: "Example charge", 
    source: token, 
}, function(err, charge) { 
    // asynchronously called 
}); 
res.send('Thanks!') 
}) 
app.post('/successp', function (req, res) { 

    var token = req.body.stripeToken; // Using Express 
    // Charge the user's card: 
var charge = stripe.charges.create({ 
    amount: 1000, 
    currency: "eur", 
    description: "Example charge", 
    source: token, 
}, function(err, charge) { 
    // asynchronously called 
}); 
res.send('Thanks!') 
}) 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!') 
}) 

我的HTML表格:

<!DOCTYPE html> 
<html> 
<head> 
</head> 




<form action="https://ocelot-kgxujaijbj.now.sh/newship/" method="post"> 
    Company (Leave blank if you don't belong to one): <input type="text" name="company"><br> 
    First name: <input type="text" name="fnames"><br> 
    Last name: <input type="text" name="lnames"><br> 
    Street and Number: <input type="text" name="street"><br> 
    City: <input type="text" name="city"><br> 
    State: <input type="text" name="state"><br> 
    ZIP/PLZ: <input type="text" name="zipcode"><br> 
    Country (Please use the iso code, for example "US" for the USA or 'DE' for Germany): <input type="text" name="country"><br> 
    <input type="submit" value="Submit"> 
</form> 
</body> 
</html> 

服务器是有效的,所以你尝试一下自己。 在此先感谢!

+0

您是否尝试过使用HTTP客户端,如邮差,试图发送一个请求到端点以外的代码? –

+0

不,我会那样做 –

+0

完成:不能POST/newship /(这里是params)@m_callens –

回答

2

您在那里提交的代码有几处错误。此外,即使它是一个测试令牌,我也强烈建议您编辑代码以从帖子中省略代码。

我已经取得了一些编辑您所提供的代码,但你根本就喜欢上围绕Mr. ShippotesteraddressFrom你失踪引号一些错误。此外,你有一个额外的)你有res.status(200).send("Label can be found under: " + mpsTransaction.label_url);

我强烈建议检查您的server.js任何错误(我会惊讶其实际运行)。

var express = require('express') 
 
var app = express() 
 
var http = require('http'); 
 
//Shippo shipping wrapper 
 
var Raven = require('raven'); 
 
var shippo = require('shippo')('<YOUR API TEST TOKEN>'); 
 
const bodyParser = require('body-parser'); 
 
const path = require('path'); 
 
app.use(bodyParser.urlencoded({extended: true})); 
 
app.use(bodyParser.json()); 
 
app.use(express.static(path.join(__dirname, '/'))); 
 
//Test 
 

 
app.get('/', function (req, res) { 
 
    res.render('index.html'); 
 
}) 
 
app.post('/newship/', function (req, res) { 
 

 
    var addressFrom = { 
 
     "object_purpose":"PURCHASE", 
 
     "name": "Mr Shippotester", 
 
     "company":"Shippo", 
 
     "street1":"215 Clayton St.", 
 
     "city":"San Francisco", 
 
     "state":"CA", 
 
     "zip":"94117", 
 
     "country":"US", //iso2 country code 
 
     "phone":"+1 555 341 9393", 
 
     "email":"[email protected]", 
 
    }; 
 

 
    // example address_to object dict 
 
    var addressTo = { 
 
     "object_purpose":"PURCHASE", 
 
     "name": req.body.fnames + ' ' + req.body.lnames, 
 
     "company": req.body.company, 
 
     "street1":req.body.street, 
 
     "city":req.body.city, 
 
     "state":req.body.state, 
 
     "zip":req.body.zipcode, 
 
     "country": req.body.country, //iso2 country code 
 
     "phone":"+1 555 341 9393", 
 
     "email":"[email protected]", 
 
    }; 
 

 
    // parcel object dict 
 
    var parcelOne = { 
 
     "length":"5", 
 
     "width":"5", 
 
     "height":"5", 
 
     "distance_unit":"in", 
 
     "weight":"2", 
 
     "mass_unit":"lb" 
 
    }; 
 

 

 
    var shipment = { 
 
     "object_purpose": "PURCHASE", 
 
     "address_from": addressFrom, 
 
     "address_to": addressTo, 
 
     "parcel": [parcelOne], 
 
     "submission_type": "DROPOFF" 
 
    }; 
 

 
    shippo.transaction.create({ 
 
     "shipment": shipment, 
 
     "servicelevel_token": "dhl_express_domestic_express_doc", 
 
     "carrier_account": "9f123316d413417d9cc48627c402772c", 
 
     "label_file_type": "png" 
 
    }) 
 
    .then(function(transaction) { 
 
     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); 
 
       } 
 
      }); 
 
     }) 
 
    }, function(err) { 
 
     // Deal with an error 
 
     console.log("There was an error creating transaction : %s", err.detail); 
 
     res.send("something happened :O") 
 
    }); 
 
}) 
 
app.post('/successp', function (req, res) { 
 

 
    var token = req.body.stripeToken; // Using Express 
 
    // Charge the user's card: 
 
var charge = stripe.charges.create({ 
 
    amount: 1000, 
 
    currency: "eur", 
 
    description: "Example charge", 
 
    source: token, 
 
}, function(err, charge) { 
 
    // asynchronously called 
 
}); 
 
res.send('Thanks!') 
 
}) 
 
app.post('/successp', function (req, res) { 
 

 
    var token = req.body.stripeToken; // Using Express 
 
    // Charge the user's card: 
 
var charge = stripe.charges.create({ 
 
    amount: 1000, 
 
    currency: "eur", 
 
    description: "Example charge", 
 
    source: token, 
 
}, function(err, charge) { 
 
    // asynchronously called 
 
}); 
 
res.send('Thanks!') 
 
}) 
 

 
app.listen(3000, function() { 
 
    console.log('Example app listening on port 3000!') 
 
})
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
</head> 
 

 

 

 

 
<form action="http://localhost:3000/newship" method="post"> 
 
    Company (Leave blank if you don't belong to one): <input type="text" name="company"><br> 
 
    First name: <input type="text" name="fnames"><br> 
 
    Last name: <input type="text" name="lnames"><br> 
 
    Street and Number: <input type="text" name="street"><br> 
 
    City: <input type="text" name="city"><br> 
 
    State: <input type="text" name="state"><br> 
 
    ZIP/PLZ: <input type="text" name="zipcode"><br> 
 
    Country (Please use the iso code, for example "US" for the USA or 'DE' for Germany): <input type="text" name="country"><br> 
 
    <input type="submit" value="Submit"> 
 
</form> 
 
</body> 
 
</html>

+0

谢谢!它现在完美无瑕! –

+0

没问题!另外,感谢从原始帖子中删除测试令牌。 – mootrichard