【发布时间】:2020-07-27 16:14:31
【问题描述】:
您好,我有以下代码:
export function createProduct(req, res) {
console.log("Execution")
const product = new Product({ ...req.body })
product.save(function (err, product) {
if (err) {
console.log("error")
const errorResponse = {}
for (let key in err.errors) {
//ValidationError handler
if (err.errors[key].properties) {
errorResponse[key] = err.errors[key].properties.message
}
//CastError handler
else {
errorResponse[key] = err.errors[key].toString().split(":")[1]
}
}
return res.status(400).send({ ...errorResponse })
}
console.log("created")
return res.send({ product })
})
}
express 端没有错误,console.log("Execution") 正在工作并正确显示此消息。我使用 Postman 对此进行了测试,当我发送一些数据时,响应永远不会到来,并且 Postman 出现错误:“错误:套接字挂断”。
我为 req.body 制作了 console.log,这是我的输出:
{
name: 'Apple Iphone 11 Pro 64GB Space Gray',
category: 'smartphone',
price: 4699,
inMagazine: { blocked: 0, inStock: 40 },
shortDescription: 'Odkryj wszystkie zalety iPhone 11 Pro 512 GB Silver. Smartfona, który zawstydza podkręconą wydajnością. Posiada bowiem najszybszy w historii procesor A13 Bionic oraz baterię, która pozwala na wiele. Weź iPhone 11 Pro do ręki i rób zdjęcia, których nie powstydziłby się nawet profesjonalista. Teraz masz do tego odpowiednie narzędzie – nowy iPhone 11 Pro posiada potrójny aparat główny, działający w oparciu o uczenie maszynowe. Efekty swojej fotograficznej przygody wraz z najmniejszymi detalami możesz ocenić z kolei na olśniewającym ekranie Super Retina XDR.',
images: [ { order: 1, src: '' } ]
}
在那之后,我发现我会检查它为什么挂起,我在 nodejs 控制台中没有错误。所以我在代码中添加了两个console.log:
console.log("error")
console.log("created")
但是两者都没有执行。所以我做了一些代码重构,这和上面一样:
export async function createProduct(req, res) {
try {
const product = await Product.create({ ...req.body })
console.log("created")
return res.send({ product })
} catch (err) {
console.log("error")
const errorResponse = {}
for (let key in err.errors) {
//ValidationError handler
if (err.errors[key].properties) {
errorResponse[key] = err.errors[key].properties.message
}
//CastError handler
else {
errorResponse[key] = err.errors[key].toString().split(":")[1]
}
}
return res.status(400).send({ ...errorResponse })
}
}
我不知道这个问题的原因可能是什么。 这是整个项目的链接:https://github.com/codemasternode/DietShopping
【问题讨论】:
-
请显示你在
{ ...req.body }中传递了什么。
标签: node.js mongodb express mongoose