此问题来自超级用户migrated,因为4天前可以在Stack Overflow. Migrated上回答。
到目前为止,我已经尝试了下面的代码,但它抛给我一个错误Failed to handle request: Cannot read properties of undefined (reading 'replace')
var INJECT = "<script src='https://examlple.com/googletranslate.js'></script>"
await server.forAnyRequest().thenPassThrough({
beforeResponse: (res) => {
var newBody = res.body.text.replace("<head>", "<head>"+INJECT)
return {
status: 200,
body: newBody
};
}
});
我怎样才能解决这个错误并成功地将JavaScript注入页面
1条答案
按热度按时间7nbnzgx91#
撇开Mockttp不谈,从这个错误本身,您可以判断出您正在尝试读取
X.replace
以获取未定义的X
。在这种情况下,有一个明确的可能原因:
res.body.text.replace(...)
。这告诉您res.body.text
未定义,因此这里有问题。实际上,如果您查看Mockttp的CompletedBody类型的参考文档,您会发现没有
.text
属性-而是.getText()
,这将返回一个承诺,而不是一个固定值(这是来自X1 E1 F1 X的突破性改变之一)。这些是异步的因为阅读请求的文本可能需要非平凡的解码步骤,例如解码Brotli数据。这意味着你需要回调
async
,使用await
,然后调用getText()
。我没有测试过,但是我认为你的例子的这个版本应该可以正常工作: