2017-09-25 1 views
1

J'ai essayé d'implémenter un paymentCtrl pour gérer les paiements Stripe mais je n'arrive pas à faire fonctionner l'express. Quand j'exécute ce code j'obtiens l'erreur suivante ci-dessous. Je suis assez nouveau à cela et je voudrais comprendre pourquoi je reçois cette erreur.erreur lors de l'utilisation d'express dans un contrôleur

erreur:

Unknown provider: appProvider <- app <- paymentCtrl

app.js:

angular.module('userApp', ['appRoutes', 'userControllers', 'userServices', 'ngAnimate', 'mainController', 'authServices', 'managementController', 'paymentController']) 

.config(function($httpProvider) { 
    $httpProvider.interceptors.push('AuthInterceptors'); 
}); 

payment.html:

<div> 

<form action="/charge" method="post"> 
    <script 
    src="https://checkout.stripe.com/checkout.js" 
    class="stripe-button" 
    data-key="pk_test_..." 
    data-amount="3000" 
    data-name="walla" 
    data-description="this is not a dog" 
    data-locale="auto" 
    data-currency="gbp" 
    ></script> 


    </script> 
</form> 

</div> 

paymentCtrl:

angular.module('paymentController', []) 

.controller('paymentCtrl', function(app, passport) { 

    app.post('/charge', function(req, res){ 

    }); 


}); 

server.js:

var express = require('express'); // ExperssJS Framework 
var app = express(); // Invoke express to variable for use in application 
var port = process.env.PORT || 8080; // Set default port or assign a port in enviornment 
var morgan = require('morgan'); // Import Morgan Package 
var mongoose = require('mongoose'); // HTTP request logger middleware for Node.js 
var bodyParser = require('body-parser'); // Node.js body parsing middleware. Parses incoming request bodies in a middleware before your handlers, available under req.body. 
var router = express.Router(); // Invoke the Express Router 
var appRoutes = require('./app/routes/api')(router); // Import the application end points/API 
var path = require('path'); // Import path module 
var passport = require('passport'); // Express-compatible authentication middleware for Node.js. 
var social = require('./app/passport/passport')(app, passport); // Import passport.js End Points/API 
var stripe = require('stripe')('sk_test_...'); 

app.use(morgan('dev')); // Morgan Middleware 
app.use(bodyParser.json()); // Body-parser middleware 
app.use(bodyParser.urlencoded({ extended: true })); // For parsing application/x-www-form-urlencoded 
app.use(express.static(__dirname + '/public')); // Allow front end to access public folder 
app.use('/api', appRoutes); // Assign name to end points (e.g., '/api/management/', '/api/users' ,etc.) 

// 
// <---------- REPLACE WITH YOUR MONGOOSE CONFIGURATION ----------> 
// 
mongoose.connect('mongodb://localhost:27017/tutorial', function(err) { 
    if (err) { 
    console.log('Not connected to the database: ' + err); 
    } else { 
    console.log('Successfully connected to MongoDB'); 
    } 
}); 

// Set Application Static Layout 
app.get('*', function(req, res) { 
    res.sendFile(path.join(__dirname + '/public/app/views/index.html')); // Set index.html as layout 
}); 

// Start Server 
app.listen(port, function() { 
    console.log('Running the server on port ' + port); // Listen on configured port 
}); 
+0

Vous obtenez une erreur angulaire je pense. pouvez-vous mettre à jour tout votre code HTML avec le code JS. Il y a un problème avec votre contrôleur en angulaire – Thusitha

+0

Hmmm je ne suis pas sûr de comprendre ce que vous entendez par "mettre à jour tout votre HTML avec le code JS" – Oscar

+0

Parce que votre * payment.html * manque le 'ng-controller'. – Thusitha

Répondre

0

Votre commande angulaire doit être injecté avec le module $http, app est non défini dans votre code côté client comme côté client ne serait pas hériter du code de votre serveur.

Module $http contient la méthode .post le long du côté de nombreuses autres méthodes telles que .get .put .delete etc.

angular.module('paymentController', []) 

.controller('paymentCtrl', function(app, passport, $http) { 

    $http.post('/charge', {}, function(req, res){ 

    }); 

}); 

Les seconds paramètres dans le http.post $ ({}) est les données que vous souhaitez transmettre à votre contrôleur. Enfin, vous avez besoin d'une méthode serveur qui récupérera la requête POST.

app.post('/charge', function(req, res) { 
    // Your server endpoint for /charge POST action 
    // req.body contains passed data. 
}); 

Comme vous essayez d'envoyer des données à l'aide angulaire à votre serveur, vous aurez besoin de lier les données de formulaire à votre modèle, et supprimer le formulaire ou écouter pour former soumettre un événement et faire un POST vous demander comme tu veux.

Comme vous n'avez pas inclus le document HTML complet, il est difficile de voir si d'autres erreurs sont incluses, telles que la déclaration ng-controller manquante dans votre document en tant que commentaire indiqué.

0

Je suppose que vous suiviez this Stripe tutorial tout ce que vous devez faire est:

Le code que vous avez écrit dans paymentCtrl doit être copié dans server.js avant app.listen

// Set Application Static Layout 
app.get('*', function(req, res) { 
    res.sendFile(path.join(__dirname + '/public/app/views/index.html')); // Set index.html as layout 
}); 

app.post('/charge', function(req, res){}); 


// Start Server 
app.listen(port, function() { 
    console.log('Running the server on port ' + port); // Listen on configured port 
}); 

Unknown provider: appProvider <- app <- paymentCtrl

Cela signifie que la variable app que vous essayez d'injecter n'existe pas dans votre code client.