2017-02-14 2 views
1

Je construis une API et aujourd'hui j'ai intégré mon avec un formulaire HTML. Cependant, il dit simplement "Can not POST/news". Qu'est-ce qui ne va pas? Mes server.js:API de livraison de noeud en utilisant Shippo ne fonctionne pas

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!') 
}) 

Mon HTML Forme:

<!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> 

Le serveur est valide, vous essayez par vous-même. Merci d'avance!

+0

Avez-vous essayé d'utiliser un client http, comme Postman essayer d'envoyer une demande au point final en dehors de votre code? –

+0

Non, je vais le faire –

+0

Fait: Ne peut pas POST/newship/(params ici) @m_callens –

Répondre

2

Il y a quelques problèmes avec le code que vous avez soumis ici. En outre, même si c'est un jeton de test, je vous encourage fortement à modifier le code là pour l'omettre de la publication.

J'ai fait quelques modifications au code que vous avez fourni, mais vous aviez tout simplement des erreurs comme sur les addressFrom vous manque des guillemets autour Mr. Shippotester. En outre, vous avez eu un ) supplémentaire où vous avez eu res.status(200).send("Label can be found under: " + mpsTransaction.label_url);

Je suggère fortement l'examen de votre server.js pour toutes les erreurs (et je serais surpris de sa course en fait).

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

Merci! Cela fonctionne parfaitement maintenant! –

+0

Pas de problème! Merci également d'avoir retiré le jeton de test du message d'origine. – mootrichard