node.js - 将参数从 Google Cloud 函数 GET 请求传递到 BigQuery
问题描述
我已经成功部署了一个从 POST 请求中接收参数的谷歌云函数。我现在正在尝试将其更改为从 GET 请求中获取参数,因为参数不包含任何私有数据。
似乎我正确地获取了传入的参数,但是当我尝试将它们传递给 bigQuery 时,它告诉我我的查询缺少参数。我知道我的代码是正确的,因为如果我对参数的值进行硬编码,它可以正常工作,例如:
bigQuery.createQueryJob({
query,
params: {
"make": "acura",
"model": "mdx",
"modelYear": 2005
}
}).then...
我也知道我得到了正确的参数,因为如果我将我的云函数更改为只返回传入的查询字符串参数,它会正确返回它们(下面注释掉的行)。如果我将云功能更改为使用 req.body 而不是 req.query 并使其成为 POST 请求,它也可以正常工作。
我不知道为什么“参数”没有正确传递给 createQueryJob。任何帮助将非常感激。这是代码(出于隐私原因,我不得不删除实际查询):
包.json:
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"@google-cloud/bigquery": "^2.0.6"
}
}
index.js:
const { BigQuery } = require("@google-cloud/bigquery");
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.getRecallDataByVehicleInfo = (req, res) => {
res.set('Access-Control-Allow-Origin', "*");
res.set('Access-Control-Allow-Methods', 'GET, POST');
res.setHeader(
"Access-Control-Allow-Headers",
"X-Requested-With,content-type"
);
const params = req.query;
// res.status(200).send("make is - " + params.make + ", model is - " + params.model + ", model year is -" + params.modelYear);
// return;
const bigQuery = new BigQuery();
const query = `myQuery
where Make = @make
and Model = @model
and ModelYear = @modelYear`
bigQuery.createQueryJob({
query,
params
}).then(results => {
const job = results[0];
return job.getQueryResults({
autoPaginate: false,
timeoutMs: 1000000
},
callback());
});
const callback = () => (err, rows) => {
if (err) {
res.status(401).send(JSON.stringify(err));
}
else {
res.status(200).send(rows);
}
};
}
解决方案
你没有使用正确的方法。看看createQueryJob
定义
没有参数,它用于将查询创建为作业。如果您查看官方(坏)示例,则必须使用query
方法。这里它的定义
注意:为什么这个例子不好?
在官方示例中,提供给该query
方法的参数名为option
。在该query
方法的文档中,第一个(也是必需的)参数命名为query
,您可以选择添加一个option
参数。所以,命名是混乱的。
推荐阅读
- robotframework - 无法在 [setup] 机器人框架中创建变量
- java - IOException: write failed: EBADF (Bad file number)
- java - 使用 Java Stream 实例化具有索引和特定枚举值的不同数量的新对象
- wordpress - buddypress - 手动激活新用户帐户
- java - 为什么 .isNotNull(); 即使我有一个控制器类,断言也会失败?
- java - 找不到具有 com.example.fileprovider 权限的提供者的元数据
- python-2.7 - 对于 udp 封装的 esp 数据包,udp 标头未占用有效负载长度
- linux - Why mktemp with -u option is stated as unsafe in its manual?
- c++ - Omnet++ INET 中修改的数据包有效负载
- java - java - 如何使用java中的spring test resttemplate将结果转换为特定的模型类型以访问该模型中的字段?