NuxtJS - Express - Самоподписанный сертификат на базовый http-запрос - PullRequest
0 голосов
/ 14 февраля 2019

Я сейчас пытаюсь понять, как использовать Express с NuxtJS.Я читал / изучал официальный сайт nuxtjs, и я точно сделал это https://nuxtjs.org/examples/auth-routes на своем проекте.Но NuxtJS выдает мне «самозаверяющий сертификат» на запрос http только на index.vue.

Моя конфигурация nuxt:

const pkg = require('./package');
const bodyParser = require('body-parser');
const session = require('express-session');
const path = require('path');
const fs = require('fs');

module.exports = {
  mode: 'universal',

  /*
  ** Headers of the page
  */
  head: {
    title: pkg.name,
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: pkg.description }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
    ]
  },

  /*--
  ** Customize the progress-bar color
  */
  loading: { color: '#FF6300', height: '5px' },

  /*
  ** Global CSS
  */
  css: [
    '@/assets/css/style.css',
    '@/assets/css/style.scss'
  ],

  /*
  ** Plugins to load before mounting the App
  */
  plugins: [
    '~/plugins/i18n.js'
  ],

  /*
  ** Nuxt.js modules
  */
  modules: [
    // Doc: https://github.com/nuxt-community/axios-module#usage
    '@nuxtjs/axios',
    '@nuxtjs/proxy',
    // Doc: https://bootstrap-vue.js.org/docs/
    'bootstrap-vue/nuxt',

    ['nuxt-i18n', {
      locales: [
        {
          code: 'en',
          iso: 'en-US',
          file: 'en.js',
          name: 'English'
        },
        {
          code: 'tr',
          iso: 'tr-TR',
          file: 'tr.js',
          name: 'Türkçe'
        },
      ],
      detectBrowserLanguage: {
        useCookie: true,
        cookieKey: 'i18n_redirected'
      },
      // parsePages: false,
      defaultLocale: 'en',
      lazy: true,
      langDir: 'lang/',
      vueI18n: {
        fallbackLocale: 'en',
      }
    }]
  ],
  router: {
    middleware: ['i18n']
  },
  /*
  ** Axios module configuration
  */
  axios: {
    // See https://github.com/nuxt-community/axios-module#options
    proxy: true,
  },
  serverMiddleware: [
    // body-parser middleware
    bodyParser.json(),
    // session middleware
    session({
      secret: 'super-secret-key',
      resave: false,
      saveUninitialized: false,
      cookie: { maxAge: 60000 }
    }),
    // Api middleware
    // We add /api/login & /api/logout routes
    '~/api'
  ],
  proxy: {
    'local:/api/': {target:'http://localhost:3000/api/', pathRewrite: { '^/api' : '' }, changeOrigin: true, ws:true},
  },
  /*
  ** Build configuration
  */
  build: {
    /*
    ** You can extend webpack config here
    */
    extend(config, ctx) {

    }
  },

  env: {
    baseUrl: process.env.BASE_URL || 'http://localhost:3000',
    NODE_TLS_REJECT_UNAUTHORIZED:'0',
  },
  dev: (process.env.NODE_ENV !== 'production')
}

И затем это мой index.vue

async func(params) {
let qrCreate =  await axios({
  method: 'post',
  url: 'local:/api/login',
  headers: {
    REQUEST_ID: 'loginWithQR' + parseInt(Math.random() * 100000),
    'Content-Type': 'application/json',
    "Allow-Control-Allow-Origin": '*'
  }
});
const qrDatax =
    '{"sessionId":"' +
    qrCreate.data.sessionId +
    '","uniqueId":"' +
    qrCreate.data.uniqueId +
    '","qrCodeType":"' +
    qrCreate.data.qrCodeType +
    '"}';
    let objJsonStr = JSON.stringify(qrDatax);   
return {
    qrDatax: qrDatax,
    qrResponse: qrCreate.data
}

},

этот код дает ошибка самозаверяющего сертификата НО в моем другом файле VUE у меня есть этот код;

async asyncData ({ params }) {
    let currencyAll = await axios({
      method: 'get',
      url: '/api/login',
      headers: {
        REQUEST_ID: 'allCurrencies' + parseInt(Math.random() * 100000),
        'Content-Type': 'application/json',
        'X-API-KEY': 'deb4ebf8075d16a33c1083b670137c44',
        "Allow-Control-Allow-Origin": '*'
      }
    });

    return {
        allCurrency: currencyAll.data
    }
  },

этот код дает 404.

и это мой api / index.js

const express = require('express');

// Create express router
const router = express.Router()

// Transform req & res to have the same API as express
// So we can use res.status() & res.json()
const app = express()
router.use((req, res, next) => {
  Object.setPrototypeOf(req, app.request)
  Object.setPrototypeOf(res, app.response)
  req.res = res
  res.req = req
  next()
})

// Add POST - /api/login
router.post('/login', (req, res) => {
  if (req.body.username === 'demo' && req.body.password === 'demo') {
    req.session.authUser = { username: 'demo' }
    return res.json({ username: 'demo' })
  }
  res.status(401).json({ message: 'Bad credentials' })
})

// Add POST - /api/logout
router.post('/logout', (req, res) => {
  delete req.session.authUser
  res.json({ ok: true })
})

// Export the server middleware
export default {
  path: '/api',
  handler: router
}

Мой index.vue выдает самозаверяющий сертификат, но мой business.vue выдает ошибку 404 не найдено.

Так что мой вопрос таков;«Почему я получаю« ошибку самозаверяющего сертификата »и почему nuxt не может найти мой экспресс-сервер?»

...