Google App Engine生产环境中的Node.js / Express路由失败?

时间:2019-01-28 07:03:40

标签: node.js express google-app-engine app.yaml

在我的应用程序中,我有几种通过Express设置的路由,这些路由在应用程序首次加载到浏览器中时被调用,并在某些用户事件上再次被调用。

这些路由可以在我的本地计算机以及Google App Engine Web Preview上进行测试,但是在生产环境中会失败。

对于有问题的路由,服务器响应是服务器上文件夹中文件的JSON数组。然后,我的浏览器端JS函数listUserFiles请求userfiles目录中的文件列表,并使用文件名填充自定义对话框。

我在生产中得到的结果是,此完全相同的函数内的HTTP请求,而不是响应userfiles目录中的文件列表,而是响应了我的index.html文件的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函数像在测试中一样在我的本地计算机上运行...在调用Express时从文件夹中获取文件名数组路线。

预先感谢您的帮助。

0 个答案:

没有答案