我是这种平台(云)的新手,我遇到了App Engine的问题。
我在App Engine中有以下项目结构:
app.yaml(内容)
runtime: nodejs
env: flex
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
api.js(内容)
'use strict';
// Load libs.
var express = require('express');
var router = express.Router();
const Datastore = require('@google-cloud/datastore'); // Imports the Google Cloud client lib
// Your Google Cloud Platform project ID
const projectId = 'datastore-quickstart-191515';
const keyFilename = '/home/testcloud99/src/be-nodejs-piloto/datastore-quickstart-5672f2cde8ca.json';
console.log('keyFilename:' + keyFilename);
// Creates a client
const datastore = new Datastore({
projectId: projectId,
keyFilename: keyFilename
});
router.route('/api/piloto')
.post(function (req, res)
{
console.log('method: POST');
// Read params
var pMsgId = req.body.msgId;
const query = datastore.createQuery('MyEntity');
query.filter('msgId', '=', pMsgId);
// exec query
datastore
.runQuery(query)
.then(results => {
//OK
return res.status(200).jsonp({
"piloto":
{
"code" : 0,
"desc" : "ok",
}
});
})
.catch(err => {
console.error('ERROR:', err);
return res.status(200).jsonp({
"piloto":
{
"code" : 1,
"desc" : "error",
"errorMessage" : err.message
}
});
});
});
module.exports = router;
所以,当我发送一条POST消息(使用soapUI)时,我得到了这个回复:
{"piloto": {
"code": 1,
"desc": "error",
"errorMessage": "ENOENT: no such file or directory, open '/home/testcloud99/src/be-nodejs-piloto/datastore-quickstart-5672f2cde8ca.json'"
}}
我猜App Engine没有识别出JSON文件,但我不知道为什么。应该做什么样的配置?
PD。我还尝试使用“数据存储区”构造函数设置“GOOGLE_APPLICATION_CREDENTIALS”环境变量而没有“keyFilename”参数,我得到了相同的结果。
希望你能帮助我。
问候。
答案 0 :(得分:1)
问题在于这个定义:
const keyFilename = '/home/testcloud99/src/be-nodejs-piloto/datastore-quickstart-5672f2cde8ca.json';
您无法使用本地计算机上的绝对文件路径,该文件系统在云计算机上不存在。您必须使用相对于应用程序的目录的路径,在您的案例app.yaml
中存在应用程序的/home/testcloud99/src/be-nodejs-piloto
文件的路径,请尝试以下方式:
const keyFilename = 'datastore-quickstart.json';
请注意,我更新了文件名以及目录结构,其中没有datastore-quickstart-5672f2cde8ca.json
文件。检查它确实是你想要的文件。
答案 1 :(得分:0)
我遇到了同样的问题,我在项目的根目录下放置了一个带有凭据json的配置目录,在我的情况下,我使用了模数path
:
path.resolve ('./config / myJSON.json')
对于我来说,这解决了。