Javascript 无法从get-request节点获取对象。js,Express
我正在学习Traversy Media的Javascript 无法从get-request节点获取对象。js,Express,javascript,node.js,json,express,Javascript,Node.js,Json,Express,我正在学习Traversy Media的Node.js教程,遇到了一个我无法解决的问题。我试图通过以下代码从对象数组中获取一个对象的响应: app.get('/api/members/:id', (req, res) => { res.json(members.filter(member => member.id === parseInt(req.params.id))); }); 但是当我试图获取http://localhost:5000/api/members/1它给了我一
Node.js
教程,遇到了一个我无法解决的问题。我试图通过以下代码从对象数组中获取一个对象的响应:
app.get('/api/members/:id', (req, res) => {
res.json(members.filter(member => member.id === parseInt(req.params.id)));
});
但是当我试图获取http://localhost:5000/api/members/1
它给了我一个空数组
这是我的主要JavaScript文件:
const express = require('express');
const path = require('path');
const app = express();
const logger = require('./middleware/logger')
const members = require('./Members')
//init middleware
//app.use(logger);
//Gets all members
app.get('/api/members', (req, res) => res.json(members));
//Get Single Members
app.get('/api/members/:id', (req, res) => {
res.json(members.filter(member => member.id === parseInt(req.params.id)));
});
//Set a static folder
app.use(express.static(path.join(__dirname, 'public')));
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server started on port ${PORT}`));
这是Members.js文件
const members = [
{
name:"john",
email:"john@mail.com",
status: "active"
},
{
name:"sally",
email:"sally@mail.com",
status: "inactive"
},
{
name:"josh",
email:"josh@mail.com",
status: "active"
}
];
module.exports = members;
我完全被卡住了,非常感谢您的帮助。您阵列中的对象没有“id”字段,这就是为什么没有与过滤器匹配的内容 您的意思是:‘在这个数组中查找对象,它的‘id’字段为X’,其中X是req.params.id。这与任何内容都不匹配,因为您的对象只有“名称”、“电子邮件”和“状态”字段,即没有“id”字段,因此在调用筛选器方法时没有匹配内容 如果你做一个小测试,这一点应该会很清楚 替换这个
app.get('/api/members/:id', (req, res) => {
res.json(members.filter(member => member.id === parseInt(req.params.id)));
});
用这个
app.get('/api/members/:email', (req, res) => {
res.json(members.filter(member => member.email === req.params.email));
});
当你发送请求时,发送'josh@mail.com'作为请求参数,您应该发现此记录返回:
发生这种情况的原因是,您的对象有一个电子邮件字段,您正在与该字段进行匹配,并且有一个对象的电子邮件字段的值为'josh@mail.com"
所以重申一下,您当前的代码不起作用,因为您试图将对象与给定的“id”字段相匹配,但它们不包含“id”字段
如果您将数据结构更改为
{
id: 1, // Added 'id' field
name:"josh",
email:"josh@mail.com",
status: "active"
}
那么您就有了一些可以匹配的东西,在那个示例中,如果您发送'1'作为id,那么您的代码应该与该文档匹配
希望这是有意义的,并且有一些用处。您希望
member.id
是什么?您的对象上没有id
属性!id
属性不会神奇地出现。这并不特别。您必须向members
数组中的每个对象显式添加id
属性。您可以使用以下代码段自动对它们进行编号,以1
开头:members.forEach((m,i)=>m.id=i+1)这完全超出了我的想象,谢谢。
{
id: 1, // Added 'id' field
name:"josh",
email:"josh@mail.com",
status: "active"
}