web_design/bakery_website/server.js
2024-07-12 22:02:32 -05:00

65 lines
1.7 KiB
JavaScript
Executable file

import express from 'express';
import dotenv from 'dotenv'
import stripe from 'stripe';
//load variable
dotenv.config();
//start server
const app = express();
app.use(express.static('public'));
app.use(express.json());
//Home Route
app.get('/', (req, res) => {
res.sendFile('menu.html', {root: 'public'});
});
//success
app.get('/success', (req, res) => {
res.sendFile('success.html', {root: 'public'});
});
//unsuccess
app.get('/unsuccess', (req, res) => {
res.sendFile('unsuccess.html', {root: 'public'});
});
//stripe
let stripeGateway = stripe(process.env.stripe_api);
let DOMAIN = process.env.DOMAIN;
app.post('/stripe-checkout', async (req, res) => {
const lineItems = req.body.items.map((item) => {
const unitAmount = parseInt(item.price.replace(/[^0-9.-]+/g, '') * 100);
console.log('item-price:', item.price);
console.log('unitAmount:', unitAmount);
return {
price_data:{
currency: 'usd',
product_data: {
name: item.title,
images: [item.productImg]
},
unit_amount: unitAmount,
},
quantity: item.quantity,
};
});
console.log('lineItems:', lineItems);
//craete checkout
const session = await stripeGateway.checkout.sessions.create({
payment_method_types: ['card'],
mode: 'payment',
success_url: `${DOMAIN}/success`,
cancel_url: `${DOMAIN}/unsuccess`,
line_items: lineItems,
//asking address in stripe checkout
billing_address_collection: 'required'
});
res.json(session.url);
});
app.listen(3005, ()=>{
console.log('listening on port 3005;');
});