hello, I am developing a site to follow a payment tutorial with nodejs mongoose.
Hello. I created a login page that allows the user to login to take a video tutorial that I sell to them when they log in.
After the payment was successful, I registered the user in a new model called payment.
From that point
I want to display the link to follow the tutorial as soon as it connects.
Now if he hasn’t purchased the button yet, thank you
USER SESSION PAGE
<% if(docs) {%>
<button class="btn btn-info my-2 my-sm-0 m-3">
<a class="nav-link text-white " href="/tutorial">
Access aux Cours
</a>
</button>
<% } else {%>
<section class="py-2">
<div class="row">
<div class="col-md-6 text-center">
<button id="checkout-button" type="submit" class="btn btn-outline-dark text-white btn-lg">acheter maintenant</button>
<script type="text/javascript">
// Create an instance of the Stripe object with your publishable API key
var stripe = Stripe(secret);
var checkoutButton = document.getElementById('checkout-button');
if(checkoutButton){
checkoutButton.addEventListener('click', function() {
// Create a new Checkout Session using the server-side endpoint you
// created in step 3.
fetch('/charge', {
method: 'POST',
})
.then(function(response) {
return response.json();
})
.then(function(session) {
return stripe.redirectToCheckout({ sessionId: session.id });
})
.then(function(result) {
// If `redirectToCheckout` fails due to a browser or network
// error, you should display the localized error message to your
// customer using `error.message`.
if (result.error) {
alert(result.error.message);
}
})
.catch(function(error) {
console.error('Error:', error);
});
});
}
</script>
</div>
</div>
</section>
<%} %>
CONTROLLERS
const User = require('../models/users')
const Payment = require('../models/payment')
const getSchool = async (req, res) =>{
let {name, id, email} = req.user
res.render('compte', {
name: name,
id: id
})
Payment.find( (err, docs) =>{
console.log('test: ', id);
console.dir(docs);
if(err) console.log(err);
res.render('compte', {docs: docs})
})
}
const postCharge = async (req, res) =>{
let {email, id, name} = req.user
const savePayment = new Payment({
Userid: id,
name: name,
email: email,
})
savePayment.save((err, userPayment) =>{
if(err) console.log(err);
})
const session = await stripe.checkout.sessions.create({
customer_email: email,
payment_method_types: ["card"],
line_items: [
{
price_data: {
currency: "eur",
product_data: {
name: "tutorial",
},
unit_amount: 2000,
},
quantity: 1,
},
],
mode: "payment",
success_url: "https://example.com/success",
cancel_url: "https://example.com/cancel",
});
res.json({ id: session.id });
}
const getPass = (req, res) =>{
res.render('tutorial')
}
RESULT IN TERMINAL
ReferenceError: D:\Node js\papeGeuye\views\compte.ejs:40
38|
39|
>> 40| <% if(docs) {%>
41| <button class="btn btn-info my-2 my-sm-0 m-3">
42| <a class="nav-link text-white " href="/tutorial">
43| Access aux Cours
docs is not defined
at eval (eval at compile (D:\Node js\papeGeuye\node_modules\ejs\lib\ejs.js:661:12), <anonymous>:21:9)
at compte (D:\Node js\papeGeuye\node_modules\ejs\lib\ejs.js:691:17)
at tryHandleCache (D:\Node js\papeGeuye\node_modules\ejs\lib\ejs.js:272:36)
at View.exports.renderFile [as engine] (D:\Node js\papeGeuye\node_modules\ejs\lib\ejs.js:489:10)
at View.render (D:\Node js\papeGeuye\node_modules\express\lib\view.js:135:8)
at tryRender (D:\Node js\papeGeuye\node_modules\express\lib\application.js:640:10)
at Function.render (D:\Node js\papeGeuye\node_modules\express\lib\application.js:592:3)
at ServerResponse.render (D:\Node js\papeGeuye\node_modules\express\lib\response.js:1012:7)
at getSchool (D:\Node js\papeGeuye\controllers\user.js:113:9)
at Layer.handle [as handle_request] (D:\Node js\papeGeuye\node_modules\express\lib\router\layer.js:95:5)
at next (D:\Node js\papeGeuye\node_modules\express\lib\router\route.js:137:13)
at ensureAuthenticated (D:\Node js\papeGeuye\config\auth.js:4:16)
at Layer.handle [as handle_request] (D:\Node js\papeGeuye\node_modules\express\lib\router\layer.js:95:5)
at next (D:\Node js\papeGeuye\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (D:\Node js\papeGeuye\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (D:\Node js\papeGeuye\node_modules\express\lib\router\layer.js:95:5)
events.js:200
throw er; // Unhandled 'error' event
^
TypeError: req.next is not a function
at done (D:\Node js\papeGeuye\node_modules\express\lib\response.js:1007:25)
at tryRender (D:\Node js\papeGeuye\node_modules\express\lib\application.js:642:5)
at Function.render (D:\Node js\papeGeuye\node_modules\express\lib\application.js:592:3)
at ServerResponse.render (D:\Node js\papeGeuye\node_modules\express\lib\response.js:1012:7)
at D:\Node js\papeGeuye\controllers\user.js:123:13
at D:\Node js\papeGeuye\node_modules\mongoose\lib\model.js:4838:16
at D:\Node js\papeGeuye\node_modules\mongoose\lib\model.js:4838:16
at D:\Node js\papeGeuye\node_modules\mongoose\lib\helpers\promiseOrCallback.js:24:16
at D:\Node js\papeGeuye\node_modules\mongoose\lib\model.js:4861:21
at D:\Node js\papeGeuye\node_modules\mongoose\lib\query.js:4406:11
at D:\Node js\papeGeuye\node_modules\kareem\index.js:135:16
at processTicksAndRejections (internal/process/task_queues.js:76:11)
Emitted 'error' event on Function instance at:
at D:\Node js\papeGeuye\node_modules\mongoose\lib\model.js:4840:13
at D:\Node js\papeGeuye\node_modules\mongoose\lib\helpers\promiseOrCallback.js:24:16
[... lines matching original stack trace ...]
at processTicksAndRejections (internal/process/task_queues.js:76:11)