Как написать app.use () для моего API в nodejs для развертывания базы данных vuejs / nodejs? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть веб-интерфейс и бэкэнд. И я развернул сайт на хостинге Firebase.

Внешний интерфейс -> Vuejs, Backend -> Nodejs

структура папок моего проекта:

--client folder
     --src
         --router
         --services
               --Api.js
               --PostService.js
         --App.vue
         --database.js
         --main.js
         --store.js

 --server folder
       --dist
       --node_modules
       --app.js
       --package.json
 --.firebaserc
 --Dockerfile
 --firebase.json

На стороне сервера я создал api для метода post, чтобы получить токен, учетную запись, exdate и т. Д., И передал в api cardconnect payment для оплаты.

Теперь создайте API и отправьте ответный ответ о статусе платежа во внешний интерфейс. Все отлично работает в localhost.

не знаю, как создать промежуточное программное обеспечение для моего API, например app.use ()

вот мой код app.js:

  const express = require('express')
  const bodyParser = require('body-parser')
  const cors = require('cors')
  const morgan = require('morgan')
  const firebase = require('firebase');
  const functions = require('firebase-functions');
  const admin = require('firebase-admin');

  const axios = require('axios');
  const credentials = new Buffer('testing:testing123').toString('base64')

  const app = express()
  app.use(morgan('combined'))
  app.use(bodyParser.json())
  app.use(cors())


  const  firebaseConfig = {
      apiKey: "AIzaSyDasdaddxsT1ge4WArImpRu1pIU",
      authDomain: "dev-xxx-com.firebaseapp.com",
      databaseURL: "https://dev-xxx-com.firebaseio.com",
      projectId: "dev-xxxxx-com",
      storageBucket: "dev-cxxxx-com.appspot.com",
      messagingSenderId: "8305673232323276",
      appId: "1:8303916:web:e0fd2dbb1"
    };

    const firebaseApp = admin.initializeApp(firebaseConfig);
    var db = firebaseApp.firestore();

   app.get('/gcp-scheduler', (req, res) => {
      res.send(
       [{
          title: "Hello World!",
          description: "Hi there! How are you?"
        }]
      )
    })


    // Add new post
      app.post('/list-server', (req, res) => {
      var token = req.body.token;
      var ccExp = req.body.ccExp;
      var cardNumber = req.body.cardNumber;
      var currentUserUUID = req.body.currentUserUUID;
      var amount = req.body.amount;
       console.log(token);
       console.log(ccExp);
       console.log(cardNumber);
       console.log(currentUserUUID);
       console.log(amount);

      (async() => {

      const paymentRequest = await getAuthTokenForThePayment({
    account: cardNumber,
    merchid: '496160873888',
    amount: amount, // Smallest currency unit. e.g. 100 cents to charge $1.00
    expiry: ccExp,
    currency: 'USD'
     });

  const charge = await makeCharge({
    merchid: paymentRequest.data.merchid, 
    retref: paymentRequest.data.retref
   });

   console.log(charge);
   console.log(charge.data.respstat)

   if (charge.data.respstat == 'A'){

     var data = db.collection('transactionTable').doc(charge.data.retref);

  var setAlan = data.set({
    'respstat': charge.data.respstat,
    'retref': charge.data.retref,
    'account': charge.data.account,
    'token': charge.data.token,
    'batchid': charge.data.batchid,
    'amount': charge.data.amount,
    'resptext': charge.data.resptext,
    'respcode': charge.data.respcode,
    'commcard': charge.data.commcard,
    'setlstat': charge.data.setlstat,

    });

    res.send(charge.data.respstat);


    } else if(charge.data.respstat == 'B'){

     console.log("Declined");
     res.send(charge.data.respstat);


    }else if(charge.data.respstat == 'C'){
    console.log("Retry");
    res.send(charge.data.respstat);


         }

      })();

  })

   const getAuthTokenForThePayment = async (data) => {

   try {

      const config = {
      headers: {
          'Content-Type': 'application/json',
          'Authorization': `Basic ${credentials}`
      }
   };

   const URL = 'https://fts.cardconnect.com:6443/cardconnect/rest/auth';

   return await axios.put(URL, data, config);

   } catch (error) {

     throw (error);

      }
    }

   const makeCharge = async (data) => {

    try {

      const config = {
      headers: {
          'Content-Type': 'application/json',
          'Authorization': `Basic ${credentials}`
        }
    };

    const URL = 'https://fts.cardconnect.com:6443/cardconnect/rest/capture';

    return await axios.put(URL, data, config);

     } catch (error) {

    throw (error);

      }
    }


   // app.listen(process.env.PORT || 8081)

   exports.app = functions.https.onRequest(app);

server-> package.json

 {
  "name": "websiteName",
  "version": "1.0.0",
  "description": "",
   "main": "app.js",
    "scripts": {
    "dev": "./node_modules/nodemon/bin/nodemon.js app.js",
    "start": "node app.js"

    },
   "author": "",
    "license": "ISC",
    "dependencies": {
    "axios": "^0.19.0",
     "body-parser": "^1.19.0",
     "cors": "^2.8.5",
     "express": "^4.17.1",
     "firebase": "^6.1.0",
     "firebase-admin": "^8.0.0",
     "firebase-functions": "^2.3.1",
     "mongoose": "^5.5.12",
     "morgan": "^1.9.1",
     "nodemon": "^1.19.1"
      }
    }

на стороне клиента -> Сервис -> Api.js

     import axios from 'axios'
     export default() => {
        return axios.create({
        baseURL: `https://dev-xxxx-com.firebaseapp.com`
         // https://dev-xxxxx-com.firebaseapp.com/
         // http://localhost:8081
        })
      }

Клиентская сторона -> услуги -> PostsService.js

   import Api from '@/services/Api'

   export default {
        fetchPosts () {
            return Api().get('gcp-scheduler')
        },

        addPost (params) {
             return Api().post('list-server', params)
        }

     }

Firebase.json:

 {
  "functions:": {
  "source": "./server"
 },
 "hosting": {
  "public": "./server/dist",
  "rewrites": [
    {
    "source": "**",
    "destination": "/index.html"
     },
   { "source": "**", "function": "app"}

  ],
 "ignore": [
  "firebase.json",
  "**/.*",
  "**/node_modules/**"
  ],
 "headers": [ {
  "source": "**/*.@(eot|otf|ttf|ttc|woff|font.css)",

  "headers": [ {
    "key": "Access-Control-Allow-Origin",
    "value": "*"
  } ]
  }, {
  "source": "**/*.@(jpg|jpeg|gif|png)",
  "headers": [ {
    "key": "Cache-Control",
    "value": "max-age=7200"
  } ]
   }, {
    "source": "404.html",
    "headers": [ {
    "key": "Cache-Control",
    "value": "max-age=300"
     } ]
   } ],

     "cleanUrls": true
   }

 }

Когда я использую сборку пряжи в терминале, она создает папку dist на стороне сервера, а затем я использую команду firebase deploy для размещения кода vuejs / nodejs. В результате код nodejs не вызывается. Не знаете, какие ошибки я сделал? Как написать app.use () middle для api и как разместить vuejs / nodejs в том же доменном имени firebase, как dev-xxx-com.firebaseapp-com.

Любая помощь очень ценю, пожалуйста ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...