【发布时间】:2019-10-30 22:31:14
【问题描述】:
当我开始在本地调试我的第一个云函数时,我注意到从 web 应用调用该函数时有两个条目被添加到数据库中,而使用 Postman 时只有一个条目(预期行为)。
它立即让我想到了 OPTIONS 调用,它现在是大多数浏览器 HTTP 请求的一部分。
我设法通过添加这个来规避这个
if (req.method === "POST") {
围绕我的函数主体,但如果真的有必要,我会感到惊讶。
还有其他更好的方法吗?
使用代码 sn-p 编辑
module.exports = async (req, res) => {
res.set("Access-Control-Allow-Origin", "*");
res.set(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
if (req.method === "POST") {
const uri = MYMONGOURI;
const client = new MongoClient(uri, { useNewUrlParser: true });
await client.connect();
const collection = client.db(MYDB).collection(MYCOLLECTION);
const { title } = req.body;
await collection.insertOne({ title });
client.close();
res.sendStatus(201);
}
res.send("Apparently not post..");
};
【问题讨论】:
-
当你看到两个请求进来时,你能不能把这两个请求的完整细节转储出来看看它们包含什么。我原以为 OPTIONS 请求会在前端处理。您有多确定第一个请求是 OPTIONS?你对你的功能的定义是什么?你能转储函数定义的当前状态吗?
-
请向我们展示您的相关服务器端代码。在 Express 中,您可以使用
app.post(),它只会在 POST 请求时触发。 -
我已经用完整的代码 sn-p 编辑了我的问题。但是请注意,这是通过 Google Cloud Functions 完成的,因此我无法完全控制我的快递'
app我认为.. -
您添加了一个代码 sn-p,但您没有添加最重要的部分,即该路由的定义方式。如果你想让 OPTIONS 请求去到不同的地方,你必须以不同的方式定义路由。
-
@jfriend00 就像我说的,我不处理路由。此文件已上传到 Google Cloud Functions..
标签: node.js express google-cloud-functions