在我的应用程序中,我有几种通过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时从文件夹中获取文件名数组路线。
预先感谢您的帮助。