2017-02-14 9 views
1

私はAPIを構築していますが、今日私はHTMLフォームと統合しました。ただし、「POST/newshipできません」と表示されます。なにが問題ですか? マイ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 /(ここでのパラメータ)@m_callens –

答えて

2

送信したコードにはいくつか問題があります。また、テストトークンであっても、コードを編集して投稿から除外することを強くお勧めします。

あなたが提供したコードを一部編集しましたが、addressFromのようないくつかのエラーがありました。Mr. Shippotesterの引用符がありませんでした。また、私は強くすべてのエラーのためにあなたのserver.jsの見直し提案(と私はそのは実際に動作して驚かれることでしょう)あなたはres.status(200).send("Label can be found under: " + mpsTransaction.label_url);

を持っていた余分な)を持っていました。

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

関連する問題