首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用post方法从角度接收未定义的json

用post方法从角度接收未定义的json
EN

Stack Overflow用户
提问于 2021-11-05 10:53:57
回答 2查看 188关注 0票数 0

我做了什么:,我试着把json从角贴到nodejs,但是失败了。我试图搜索“未定义的post nodejs json”和"options而不是post“的解决方案,并将头更改为排除该选项,还试图解析我试图设置的json数据,但没有什么有用的。

的问题:在的角度代码下面,我没有得到响应,没有输出的"console.log()",我想知道是怎么回事。而我在json.body中发现的app.js返回“未定义”

我检查了浏览器,首先它发送选项请求并获得200 no,但接下来当它发送post时,但没有返回状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OPTIONS /api/postData HTTP/1.1
Host: 127.0.0.1:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Referer: http://127.0.0.1:4200/
Origin: http://127.0.0.1:4200
Connection: keep-alive
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST http://127.0.0.1:3000/api/postData
Host: 127.0.0.1:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 27
Origin: http://127.0.0.1:4200
Connection: keep-alive
Referer: http://127.0.0.1:4200/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

代码中有错误吗?

角码: component.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.http.post<any>("http://127.0.0.1:3000/api/postData", loc_json).subscribe(response =>{
      console.log("Post to nodejs from angular")
      console.log(response);
    }); 

使用快递的nodejs : app.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const express = require('express')
const api_helper = require('./API_helper')
const port = 3000
const cors = require('cors')
const app = express()
app.use(cors())


// allowCrossDomain = function(req, res, next) {
//     res.header('Access-Control-Allow-Origin', '*');
//     res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
//     res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
//     if ('OPTIONS' === req.method) {
//       res.send(200);
//     } else {
//       next();
//     }
//   };
  
// app.use(allowCrossDomain);

app.get('/', (req, res, next) => {
    res.send("wtffffffffffffffffff");//send to the page
})

app.post('/getAPIResponse', (req, res, next) => {
    api_helper.make_API_call('https://jsonplaceholder.typicode.com/posts')
    .then(response => {
        res.json(response)
    })
    .catch(error => {
        res.send(error)
    })
})

//angular --> nodejs
app.post('/api/postData', function(request, response){
    //console.log("postData on nodejs 3000");
    // const loc_nodejs = req.body;
    // console.log("loc_nodejs.loc ", loc_nodejs); 
    console.log(request.body);  
    
})

app.listen(port, () => console.log(`NodeJS App listening on port ${port}!`))
EN

回答 2

Stack Overflow用户

发布于 2021-11-05 10:59:15

因为您在请求中使用Sec-Fetch-Mode: cors,所以您在Express中的API需要启用并正确配置CORS。如果您正在进行本地开发,我将关闭CORS并在生产中启用它,但您也可能运行两个进程的角应用程序和Express应用程序。在这种情况下,请遵循Express的文档,通过下面的文档在API上启用CORS。

https://expressjs.com/en/resources/middleware/cors.html

票数 0
EN

Stack Overflow用户

发布于 2021-11-05 11:34:17

我在代码中添加了这些内容,它们在图片中显示为不推荐的,但它确实有效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const bp = require('body-parser');
app.use(bp.json())
app.use(bp.urlencoded({ extended: true }))\

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69857986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文