Node.js / Сбой экспресс-маршрутизации в производственной среде Google App Engine? - PullRequest
0 голосов
/ 28 января 2019

В моем приложении у меня есть несколько маршрутов, настроенных через Express, которые вызываются при первой загрузке приложения в браузере и которые вызываются снова при определенных пользовательских событиях.

Эти маршруты работают при тестировании на моем локальном компьютере, а также в Google App Engine Web Preview, но не работают в производственной среде.

Для рассматриваемых маршрутов ответ сервера представляет собой массив JSON файлов в папке на сервере.Моя функция JS на стороне браузера listUserFiles затем запрашивает список файлов в каталоге userfiles и заполняет настраиваемое диалоговое окно с именами файлов.

Что я получаю в работе, так это то, что HTTPзапрос внутри этой точно такой же функции, вместо того, чтобы отвечать списком файлов в каталоге userfiles, отвечает HTML-кодом моего файла index.html, а затем выдает ошибки, когда JSON.parse() не может понять это.

Я подозреваю, что это может быть связано с тем, как я настроил мой файл app.yaml для производственной среды, но я новичок в Google App Engine, файлах конфигурации yaml и производственном приложении.развертывание в целом, и ходили кругами в течение нескольких дней с доступной документацией.

Вот код, который я считаю уместным:

Со стороны сервера routes.js

const express = require('express');
const router = express.Router();
const jsonMethods = require('./js/jsonMethods');
const htmlMethods = require('./js/htmlMethods');
const qs = require('querystring');
const fileUpload = require('express-fileupload');
const bodyParser = require("body-parser");

//Middle ware that is specific to this router
router.use(function timeLog(req, res, next) {
  console.log('Time: ', Date.now());
  next();
});


//router.use( bodyParser.json() );
router.use( bodyParser.urlencoded({
    extended: true
}));

router.use(fileUpload( { limits: { fileSize: 5 * 1e6 } } )); 

router.get('/listUserFiles' , 
                    function( req, res ) {
                        var userfiles = jsonMethods.listFilesInDir( (__dirname + '/userfiles'), res );
                        res.send();         
                    }
                    );

Мой файл app.yaml:

runtime: nodejs10
instance_class: F2

env_variables:
  BUCKET_NAME: "example-gcs-bucket"

handlers:

- url: /assets
  static_dir: assets

- url: /css
  static_dir: css

- url: /userHelpDocs
  static_dir: userHelpDocs

- url: /userImages
  static_dir: userImages

- url: /userfiles
  static_dir: userfiles   

- url: /listUserfiles
  static_dir: listUserfiles

- url: /themes
  static_dir: themes 

- url: /lucidNodes-addons
  static_dir: lucidNodes-addons

- url: /contextMenu
  static_dir: contextMenu

- url: /lucidNodes-modules
  static_dir: lucidNodes-modules

- url: /js
  static_dir: js

- url: /libs
  static_dir: libs

- url: /css
  static_dir: css  

- url: /(.*\.(html|js))$
  static_files: \1
  upload: (.*\.(html|js))$

- url: /.*
  static_files: index.html
  upload: index.html
  secure: always

... и функция из js на стороне браузера, которая обрабатывает запрос и ответ:

/* USERFILE DIRECTORY LISTING */

var userfiles;

function listUserFiles( domElementId = 'loadFile-panel-area', routeURL = "/listUserFiles", folderURL = "/userfiles" ){

    var httpRequest = new XMLHttpRequest();

    console.log( "listUserFiles(): ", httpRequest );

    // Send the request
    httpRequest.open( "GET", routeURL, true );
    httpRequest.send();

    httpRequest.onreadystatechange = function() {
        if ( this.readyState === 4 && this.status == 200 ){

            userfiles = JSON.parse( this.responseText );
            listFileLinks( folderURL, userfiles, document.getElementById( domElementId ) );

        }  

        else if( this.readyState === 4 && this.status !== 200 ){
            console.error( this.status.toString() + ": UserFiles Folder " + folderURL + " not found!" );
        }
    }
}

...

Итак, я бы хотел, чтобы функция listUserFiles работала какэто происходит в тестировании и на моей локальной машине ... получение массива имен файлов из папки при вызове экспресс-маршрута.

Заранее спасибо за вашу помощь.

...