Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Express中返回JSON_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何在Express中返回JSON

Javascript 如何在Express中返回JSON,javascript,node.js,express,Javascript,Node.js,Express,我不熟悉node/express。我有一个简单的express应用程序,其中有一条发布路线(“/”)。给定一个GitHub用户名列表,它应该返回关于这些开发人员的信息 例如,如果我发布 { "developers": ["JohnSmith", "JaneDoe"] } 它应该会回来 [ { "bio": "Software Engineer at Google", &quo

我不熟悉node/express。我有一个简单的express应用程序,其中有一条发布路线(“/”)。给定一个GitHub用户名列表,它应该返回关于这些开发人员的信息

例如,如果我发布

{ "developers": ["JohnSmith", "JaneDoe"] }
它应该会回来

[
  {
    "bio": "Software Engineer at Google",
    "name": "John Smith"
  },
  {
    "bio": "Product Manager, Microsoft",
    "name": "Jane Doe"
  }
]
这就是我目前所拥有的

const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());

app.post('/', function(req, res, next) {
  try {
    let results = req.body.developers.map(async d => {
      return await axios.get(`https://api.github.com/users/${d}`);
    });
    let out = results.map(r => ({ name: r.data.name, bio: r.data.bio }));    
    return res.send(out);
  } catch {
    next(err);
  }
});

app.use((err, req, res, next) => {
  res.send("There was an error");
})

app.listen(3000, function(){
  console.log("Server started on port 3000!");
});

当我在像失眠这样的工具中尝试此操作时,我不断发现
出现错误

您可以根据文档使用
res.formate()

或根据文档设置
res
的类型


在中间件中,您总是说res.json(“有一些错误”),如果不需要,为什么要保留它呢。如果删除app.use()。您将看到请求返回给您开发人员的姓名

请阅读本文以了解错误处理。
在Express API中返回JSON的方式如下:

res.status(200).json(out)

有关完整文档,请参阅。

您得到的是一个错误。因为,您的
/
路线中有一个错误。但是,问题是您没有使用catch编写
err
参数。如果在
catch
(您的
try/catch
块)和
console.log
中添加一个,您将看到错误

TypeError:无法读取未定义的属性“name”
出现此错误是因为,
results
变量实际上是一个挂起的
Promise
数组。你需要首先解决这些悬而未决的承诺。一种方法是

app.post(“/”,函数(req、res、next){
试一试{
const developers=req.body.developers;
让承诺=[];
developers.map((d)=>{
承诺。推送(axios.get)(`https://api.github.com/users/${d}`);
});
承诺。所有(承诺)。然后((回应)=>{
释放=响应。映射((r)=>({
名称:r.data.name,
bio:r.data.bio,
}));
返回res.send(out);
});
}捕捉(错误){
下一个(错误);
}
});

错误是什么?这是否回答了您的问题@EA6923检查这一点,我认为这很容易,因为res.send(JSON.stringify(“有一个错误”)@用户123456将导致
“\”出现错误\
,这可能不是所需的。
res.status(200).json(out)