【发布时间】:2019-01-19 07:36:18
【问题描述】:
邮递员请求似乎有效,但我无法让 fetch() 处理相同的请求和标头。快把我逼疯了。
客户:
fetch('http://localhost:1234/acts/create', {
method: 'POST',
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: JSON.stringify({
name: 'BARNEY MCGREW!',
rating: 90,
})
})
快递:
exports.act_create = function (req, res) {
console.log(' req >>>>', req.body);
var act = new Act(
{
name: req.body.name,
rating: req.body.rating
}
);
// res.set('Content-Type', 'application/x-www-form-urlencoded');
act.save(function (err) {
if (err) {
return console.log(err);
}
res.send('Act Created successfully')
})
};
这会生成以下终端输出:
req >>>> : [Object: null prototype] { '{"name":"IngleburtHumperdink","rating":10}': '' }
act is: { _id: 5c4245bea7bb511c20de6b7a }
所以它有点通过但后来我得到ValidationError: Act validation failed: name: Pathnameis required., rating: Path "rating" is required.
路径“名称”也一样。
因此,很难将 json 字符串化对象与传入的名称/评级值匹配。但是从 POST 请求的正文中删除 JSON.stringify 会给我一个req >>>> [Object: null prototype] { '[object Object]': '' }
我在这里做错了什么?
[并且是否有任何好的博客清楚地解释了如何通过正文传递数据,以便可以通过fetch() 毫无问题地访问它? ]
【问题讨论】:
-
你在哪里打电话
fetch?该本地页面的控制台?在 devtools 的 Network 选项卡中使用 fetch 时请显示错误 -
你在使用body-parser middleware吗?
-
@Hongarrc 是的,使用 fetch 调用 Mongo/Mlab 快递点。所以它在 chrome 浏览器开发工具控制台中。它只是挂在
Promise {<pending>}上,是的,@Oscar 我在我的 app.js 中设置了 bodyParserapp.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false }));- 我一直在关注本教程,所以除了products和acts之外,它都是一样的。 ???? -
@NewbieAid 如果您尝试在控制台中记录
req.body.name,输出是什么? -
它将记录 undefined – 当
req.body被记录时,我们可以看到它是一个只包含一个键的对象,而该键恰好是整个字符串化的 JSON。
标签: javascript express fetch