无法将数据发布到 Google Cloud Run

Dav*_*983 -6 express google-cloud-run

我在 Google Cloud Run 上有一个非常基本的快速服务,该服务已构建并部署到容器中。它的访问权限设置为允许未经身份验证。

我在前端使用 fetch 和 React 将数据发送到服务器并接收响应。

在服务器上,我似乎无法从我的请求正文中获取数据?无论我对标题等使用什么设置,我都无法从中获取任何数据。

我正在使用 fetch clientside 发送 POST 请求:

const sendData = async() => {        
        const response = await fetch('https://my-service.run.app', {
            method: 'POST',
            mode: 'no-cors',
            body: { mydata: "some data"},
            json: true
          });
          return response;
    }
Run Code Online (Sandbox Code Playgroud)

在服务器上,我的服务超级简单。目前我想要的只是将 json 从客户端发送到云运行服务器,记录它,然后将相同的数据作为响应发送回客户端。但是,控制台日志总是给我一个空对象。

const express    = require('express');
const app        = express();
const bodyParser = require('body-parser');
const {Storage}   = require('@google-cloud/storage');
const cors = require('cors');

const corsOptions = {
    origin: true,
    mode: 'no-cors',
    optionsSuccessStatus: 200
};

const port = process.env.PORT || 8080;

app.use(bodyParser.json());

app.listen(port, () => {

  console.log('Listening on port', port);

});


app.post('/', async (req, res) => {

    try {

        const corsMiddleware = cors(corsOptions);

        return corsMiddleware(req, res, () => {
            const servicedata = req.body;
            console.log("MY DATA", servicedata )
            res.send(srcontext);
        });

    }

    catch (ex) {
        console.log(`Error: ${ex}`);
    }

})
Run Code Online (Sandbox Code Playgroud)

Fer*_*ona 5

问题是你的第一个代码。在它的文档node-fetch提到,在制作 JSON POST 时,您应该添加headers: { 'Content-Type': 'application/json' }代码中不存在的标头。

然后,你的代码应该是这样的

const sendData = async() => {        
        const response = await fetch('https://my-service.run.app', {
            method: 'POST',
            mode: 'no-cors',
            body: JSON.stringify({ "mydata": "some data"}),
            headers: { 'Content-Type': 'application/json' }
            json: true
          });
          return response;
 }

Run Code Online (Sandbox Code Playgroud)

该选项json:true仅用于将响应解析为 json,而不是请求。

编辑

正如@sebastian-simon 建议的那样: ({ mydata: "some data" })and({ "mydata": "some data" })是等效的表达式并导致等效的对象。如果mydata是字符串或符号变量,则({ [mydata]: "some data" })需要使用。