Express Can';t将数据发布到Google Cloud Run

Express Can';t将数据发布到Google Cloud Run,express,google-cloud-run,Express,Google Cloud Run,我在Google Cloud Run上有一个非常基本的express服务,它构建并部署到一个容器中。它具有允许未经身份验证的访问设置 我在前端使用fetch和React将数据发送到服务器并接收响应 在服务器上,我似乎无法从请求主体中获取数据?无论我对标题等使用什么设置,我都无法从中获取任何数据 我正在使用fetch clientside发送POST请求: const sendData = async() => { const response = await

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

我在前端使用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;
    }
在服务器上,我的服务非常简单。目前我只想将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}`);
    }

})

问题是您的第一个代码。在
节点fetch
中提到,在进行JSON POST时,您应该添加头
头:{'Content Type':'application/JSON'}
,该头不在代码中

那么,您的代码应该是这样的

const sendData=async()=>{
const response=等待获取('https://my-service.run.app', {
方法:“POST”,
模式:“无cors”,
body:JSON.stringify({“mydata”:“some data”}),
标题:{'Content-Type':'application/json'}
json:true
});
返回响应;
}
选项
json:true
仅用于将响应解析为json,而不是请求

编辑

正如@sebastian simon所建议的:
({mydata:“some data”})
({“mydata:“some data”})
是等价的表达式,产生等价的对象。如果
mydata
是字符串或符号变量,则需要使用
({[mydata]:“some data”})

是否尝试使用Curl?你确认你的服务正常吗?是的,服务正常。我在Chrome的“网络”选项卡中得到了200,登录该服务确认了对端点的200 post请求。因此,问题来自前端,它没有正确格式化请求。对不起,我不知道!!不用担心,纪尧姆-一如既往,我非常感谢您的帮助-我在下面给出了详细的答案,希望能够解决前端无法工作的确切原因:)