POST req:仅支持绝对 URL

Posted

技术标签:

【中文标题】POST req:仅支持绝对 URL【英文标题】:POST req: Only absolute URLs are supported 【发布时间】:2021-03-20 09:14:55 【问题描述】:

我正在编写这个 app.js 客户端文件,它执行对服务器的发布请求(代码如下):

    const fetch = require('node-fetch');

    /* Function to POST data */
    const postData = async ( url = 'http://localhost/8000/add/', data = )=>
          console.log(data)
          const response = await  fetch(url, 
          method: 'POST', // *GET, POST, PUT, DELETE, etc.
          credentials: 'same-origin', // include, *same-origin, omit
          headers: 
              'Content-Type': 'application/json'
          ,
          body: JSON.stringify(data) // body data type must match "Content-Type" header        
        );
      
        try 
            const newData = await response.json();
            console.log(newData);
            return newData
        catch(error) 
          console.log("errors", error);
          // appropriately handle the error
        
    



  // TODO-Call Function
  postData('/addAnimal', animal: 'girrafe');

当我使用node app.js 运行时,我不断收到此错误:

node .\app.js
 animal: 'girrafe' 
D:\Downloads\FEWD\WebAPIs\N&E\node_modules\node-fetch\lib\index.js:1305
                throw new TypeError('Only absolute URLs are supported');
                      ^

TypeError: Only absolute URLs are supported
    at getNodeRequestOptions (D:\Downloads\FEWD\WebAPIs\N&E\node_modules\node-fetch\lib\index.js:1305:9)
D:\Downloads\FEWD\WebAPIs\N&E\node_modules\node-fetch\lib\index.js:1305
                throw new TypeError('Only absolute URLs are supported');
                      ^

TypeError: Only absolute URLs are supported
    at getNodeRequestOptions (D:\Downloads\FEWD\WebAPIs\N&E\node_modules\node-fetch\lib\index.js:1305:9)
    at D:\Downloads\FEWD\WebAPIs\N&E\node_modules\node-fetch\lib\index.js:1410:19
    at new Promise (<anonymous>)
    at fetch (D:\Downloads\FEWD\WebAPIs\N&E\node_modules\node-fetch\lib\index.js:1407:9)
    at postData (D:\Downloads\FEWD\WebAPIs\N&E\demo\app.js:22:31)
    at Object.<anonymous> (D:\Downloads\FEWD\WebAPIs\N&E\demo\app.js:42:3)

任何关于为什么的建议,将不胜感激。 谢谢

【问题讨论】:

【参考方案1】:

您的 url = 'http://localhost/8000/add' 将默认参数设置为该 URL,然后当您将其作为参数提供时,您使用 '/addAnimal' 覆盖它。您应该提供一个绝对 URL:

postData('http://localhost/8000/addAnimal', animal: 'girrafe');

作为旁注,我很确定 localhost/8000 是一个错字,应该是 localhost:8000

【讨论】:

以上是关于POST req:仅支持绝对 URL的主要内容,如果未能解决你的问题,请参考以下文章

urllib默认只支持HTTP/HTTPS的GET和POST方法

Nginx笔记:支持对用户提交URL和服务的URL不一致时,保持对POST提交的支持

在vue-cli搭建的项目中在后台mock接口中支持req.body和req.cookies

Spring Boot 尝试访问 Post 请求 URL,但显示 GET 不支持

Express post请求无法解析参数的原因

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST