Javascript NodeJS fetch()API和POST请求

Javascript NodeJS fetch()API和POST请求,javascript,node.js,express,post,fetch,Javascript,Node.js,Express,Post,Fetch,下面是HTML代码的一部分,允许客户输入美国邮政编码和当天的感觉。 该应用程序将根据API调用提供的邮政编码提取天气数据API.openweathermap.org/data/2.5/weather?Zip={Zip Code}、{country Code}&appid={API key}。您可以参考文档 下面是服务器端代码。目前,我只使用POST请求来记录app_信息中的数据。稍后将对此部分进行改进 // Require Express to run server and routes con

下面是HTML代码的一部分,允许客户输入美国邮政编码和当天的感觉。 该应用程序将根据API调用提供的邮政编码提取天气数据API.openweathermap.org/data/2.5/weather?Zip={Zip Code}、{country Code}&appid={API key}。您可以参考文档

下面是服务器端代码。目前,我只使用POST请求来记录app_信息中的数据。稍后将对此部分进行改进

// Require Express to run server and routes
const express = require("express");

// Start up an instance of app
const app = express();

/* Dependencies */
const bodyParser = require("body-parser");

/* Middleware*/
//Here we are configuring express to use body-parser as middle-ware.
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// Cors for cross origin allowance
const cors = require("cors");
app.use(cors());

// Initialize the main project folder
app.use(express.static("website"));

// Setup empty JS object to act as endpoint for all routes
const projectData = Array();

app.post("/", function (req, res) {
  console.log(res.body);
});

// Setup Server
const port = 3000;

function listening() {
  console.log(`server running on localhost: ${port}`);
}

const server = app.listen(port, listening);

页面加载成功。我输入邮政编码:90001和“我感觉很好”;然后点击“生成”按钮

控制台中的网络显示JS成功获取天气数据

在app.js上检测到错误

这是:

const response = await fetch("/", { //Error!!!
    method: "POST",
    mode: "cors",
    credentials: "same-origin",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(app_input),
  });

  try {
    const appData = await response.json();
    return appData;
  } catch (error) {
    console.log("warning: ", error); //Error!!!
  }

请告知我哪里出错。

您没有在postData函数中等待downloadAPI(),因此该API的值没有存储在app_info变量中。也许这就是您的问题

当您的示例url使用查询参数时,为什么要使用POST。?顺便说一句:
意外标记
通常是服务器端发送HTML,请查看浏览器的“网络”选项卡以查看它返回的内容。@Keith您能进一步解释POST和查询参数吗?我是初学者。顺便说一句,为了更好的澄清,我对我的问题进行了修改。请帮助。我更新了我的代码,控制台中的网络截图显示了我的代码下载的天气API数据。但是,下载API()后的下一行在postData()函数中失败。请在执行
等待响应.json()之前尝试记录
response.text()
。响应是json吗?下面是JS控制台中的文本
Promise{}\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupromise[[PromiseState]]:“completed”
。响应结果是HTML文档。一个非常长的HTML字符串,以~~~~开头。您是否
等待响应。text()
?从
获取的初始api调用的状态和响应是什么?它是json格式的吗?我尝试
try{const text=await response.text();console.log(text);const appData=await response.json();return appData;}catch(error){console.log(“警告:,错误);}
结果是HTML,在json的位置0处显示==>语法错误:意外标记”。
// Require Express to run server and routes
const express = require("express");

// Start up an instance of app
const app = express();

/* Dependencies */
const bodyParser = require("body-parser");

/* Middleware*/
//Here we are configuring express to use body-parser as middle-ware.
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// Cors for cross origin allowance
const cors = require("cors");
app.use(cors());

// Initialize the main project folder
app.use(express.static("website"));

// Setup empty JS object to act as endpoint for all routes
const projectData = Array();

app.post("/", function (req, res) {
  console.log(res.body);
});

// Setup Server
const port = 3000;

function listening() {
  console.log(`server running on localhost: ${port}`);
}

const server = app.listen(port, listening);

const response = await fetch("/", { //Error!!!
    method: "POST",
    mode: "cors",
    credentials: "same-origin",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(app_input),
  });

  try {
    const appData = await response.json();
    return appData;
  } catch (error) {
    console.log("warning: ", error); //Error!!!
  }