我一直在遵循使用mongoDB,Express,JQuery和Node.js构建CRUD应用程序的教程。我现在尝试添加自定义功能,并且在偏离所模仿的代码时无法同时编辑和检索文档。我对正在发生的事情感到好奇。我遵循了有效的删除和编辑功能,以构建新的编辑功能,以允许我使用不同的UI更新多个字段。我也想让文档使用这些字段来填充网站不同部分中各个块的HTML,但是我无法使文档返回。
我确信get和put函数在Postman中可以正常工作。
正在起作用:
app.put('/:id',(req,res) =>{
const todoID = req.params.id;
const userInput = req.body;
db.getDB().collection(collection).findOneAndUpdate({_id:
db.getPrimaryKey(todoID)}, {$set: {todo: userInput.todo}},
{returnOriginal : false},(err,result)=>{
if(err)
console.log(err);
else{
res.json(result);
}
});
});
app.post('/',(req,res)=>{
const userInput = req.body;
db.getDB().collection(collection).insertOne(userInput,
(err,result)=>{
if(err)
console.log(err);
else
res.json({result: result, document: result.ops[0]});
});
});
app.delete('/:id',(req,res)=>{
const todoID = req.params.id;
db.getDB().collection(collection).findOneAndDelete({_id :
db.getPrimaryKey(todoID)},(err,result)=>{
if(err)
console.log(err);
else
res.json(result);
});
});
此人在邮递员中工作,但在我的应用中不工作:
app.get('/', (req,res)=>{
const todoID = req.params.id;
db.getDB().collection(collection).findOne({_id:
db.getPrimaryKey(todoID)}, (err,documents)=>{
if(err)
console.log(err);
else{
console.log(documents);
res.json(documents);
}
});
});
这很正常:
const deleteShipment = (shipment, divShipmentID, deleteID) =>{
let deleteBtn = $(`#${deleteID}`);
deleteBtn.click(()=>{
fetch(`/${shipment._id}`,{
method: "delete"
}).then((response)=>{
return response.json();
}).then((data)=>{
if(data.ok == 1){
$(`#${divShipmentID}`).remove();
}
});
});
}
这不是:
const openEditOptions = (shipment, editID) =>{
let editBtn = $(`#${editID}`);
editBtn.click(()=>{
console.log('activated');
fetch(`/${shipment._id}`,{method: "get"}).then((response)=>{
return response.json();
}).then((data)=>{
console.log(data);
readyEditForm(shipment);
});
});
}
这是HTML:
<button class="shipment-edit" id="edit_5c6759a05b4290e978136ea0"
type="button">Edit</button>
<button type="button" class="shipment-delete"
id="delete_5c6759a05b4290e978136ea0">Delete</button>
我希望单击该特定“货件”的编辑按钮时,会将其登录到控制台“已激活”,并在控制台和函数readyEditForm中返回货件数据。什么都没发生。
答案 0 :(得分:0)
req.params
是一种在路径中:
之后获取路由参数的方法。
app.get('/:id' (req, res) => {
console.log(req.params.id); //prints whatever the user put in place of ":id"
});
app.get('/' (req, res) => {
console.log(req.params.id); //prints undefined
});
一旦您修复了代码的那部分,其余部分就应该起作用。