我今天更新了node,但出现此错误:
error: TypeError: Cannot read properties of undefined (reading 'transformFile')
at Bundler.transformFile (/Users/.../node_modules/metro/src/Bundler.js:48:30)
at runMicrotasks (<anonymous>)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async Object.transform (/Users/.../node_modules/metro/src/lib/transformHelpers.js:101:12)
at async processModule (/Users/.../node_modules/metro/src/DeltaBundler/traverseDependencies.js:137:18)
at async traverseDependenciesForSingleFile (/Users/.../node_modules/metro/src/DeltaBundler/traverseDependencies.js:131:3)
at async Promise.all (index 0)
at async initialTraverseDependencies (/Users/.../node_modules/metro/src/DeltaBundler/traverseDependencies.js:114:3)
at async DeltaCalculator._getChangedDependencies (/Users/.../node_modules/metro/src/DeltaBundler/DeltaCalculator.js:164:25)
at async DeltaCalculator.getDelta (/Users/.../node_modules/metro/src/DeltaBundler/DeltaCalculator.js:94:16)
Run Code Online (Sandbox Code Playgroud)
除此之外我没有做过任何不寻常的事情,所以我不知道该分享什么。如果我遗漏了任何信息,请评论,我会添加它。
在构建终端时也会抛出此错误:
Failed to construct transformer: Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
at stableHash (/Users/.../node_modules/metro-cache/src/stableHash.js:19:8)
at Object.getCacheKey (/Users/.../node_modules/metro-transform-worker/src/index.js:593:7)
at getTransformCacheKey (/Users/.../node_modules/metro/src/DeltaBundler/getTransformCacheKey.js:24:19)
at new Transformer (/Users/.../node_modules/metro/src/DeltaBundler/Transformer.js:48:9) …Run Code Online (Sandbox Code Playgroud) 我有一个名为Author的模型.一位作者有很多文章.文章有一个名为.published的范围,其中:where(已发布:true).
我想加载作者,发表文章.我试过了:
Author.includes(:articles.published).find(params[:author_id])
Run Code Online (Sandbox Code Playgroud)
但这会引发错误:未定义的方法'已发布'.任何的想法?
所以我有以下结构:
ClientFile属于所有者(类名=联系人).我正在尝试使用API创建Clientfile.该请求包含以下数据:
{
name: "Hello!"
owner: {
id: 1,
first_name: "Charlie",
last_name: "Watson"
}
}
Run Code Online (Sandbox Code Playgroud)
我根据我的结构创建了序列化器.希望这个API调用会创建一个名为"Hello!"的客户端文件.并联系ID 1作为所有者:
class ContactSerializer(serializers.ModelSerializer):
class Meta:
model = Contact
fields = (
'id',
'first_name',
'last_name',
)
class ClientfileSerializer(serializers.ModelSerializer):
owner = ContactSerializer(read_only=False)
class Meta():
model = Clientfile
fields = (
'id',
'name',
'owner',
)
def create(self, validated_data):
owner = Contact.objects.get(pk=validated_data['owner']['id'])
Run Code Online (Sandbox Code Playgroud)
我确实进入了创建方法.但是,我需要的唯一字段(['owner']['id'])无法访问.如果我这样做print ['owner']['first_name'],确实会返回'查理'.但由于某些原因,ID似乎无法访问...
有什么理由可以发生这种情况?我错过了什么吗?(我是Django的新手)
解决方案:刚刚发现ID首先没有显示的原因是因为我必须在这样的字段中声明它:希望这会有所帮助.
class ContactSerializer(serializers.ModelSerializer):
id = serializers.IntegerField() # ? Here
class Meta:
model = Contact
fields = (
'id',
'first_name', …Run Code Online (Sandbox Code Playgroud) 我想使用 Service Workers 在我的渐进式 Web 应用程序(PWA) 上设置 Web 推送通知。但我无法理解 Google Cloud Messaging 和 Amazon SNS 等第三方服务的作用,以及我是否需要它们。
据我了解,当用户单击“允许通知”按钮时,您将获得一个唯一的订阅端点。然后在后端,您可以使用此端点向该特定用户发送通知。
然而,我发现的所有后端库(例如Node.js 的pywebpush或web-push)都提到您需要 GCM API 密钥才能发送通知。
但MDN Push API 文档是这样说的:
早于 52 的 Chrome 版本要求您在 Google Cloud Messaging 上设置一个项目来发送推送消息 [...]
所以我假设新版本的 Chrome(今天的版本 58)应该能够在没有第三方帮助的情况下显示通知。
这是我想要实现的目标的示例。我只是不确定他们在后端做什么。
注意:我并不是尝试将本机推送通知发送到 Android 或 iOS 设备,而只是使用 Web Push API 发送到 Chrome 上的渐进式 Web 应用程序。
所以我有一个"模板字符串",如下所示:
var templateString = "Hello my name is {{name}}";
Run Code Online (Sandbox Code Playgroud)
我要插入的名称是变量.所以我这样做了:
var miniScope = {
name: "Chuck"
};
var sentence = $interpolate(templateString)(miniScope);
/* sentence: "Hello my name is Chuck" */
Run Code Online (Sandbox Code Playgroud)
这有效.现在我想大胆一下这个名字.我显然已经尝试过:
var miniScope = {
name: "<strong>Chuck</strong>"
};
Run Code Online (Sandbox Code Playgroud)
但是html代码被转义了.知道我怎么能做到这一点?
PS:对于那些想知道我为什么不把字符串放在模板中的人来说,这是因为我的模板字符串来自服务器.
所以我正在构建一个Django渐进式Web应用程序,使用服务工作者提供离线支持.
根据谷歌的文档,sw.js文件应该是应用程序URL的根目录:
您需要执行此操作,因为服务工作者的范围(ServiceWorker将加载的URL集)由其所在的目录定义.
目前,我正在从http://example.com/static/文件夹中提供所有静态资源.但我需要在以下网址上提供此特定文件:http://example.com/sw.js.
知道我怎么能做到这一点?我可以制定一个特定的nginx规则来执行此重定向,但我不知道这是否是最干净的方法.也许这个设置应该存在于urls.py中?
注意:我已经看到这个问题建议使用static()方法django.conf.urls.static.但是django的文档说静态方法仅供开发使用,对我不利.
注意(2):我想我可以更改STATIC_URL设置,但我对从/ static目录提供的文件感到满意.我只希望这个文件位于url的根目录下.
我正在构建一个供 iOS/Android 应用程序使用的 API。该应用程序使用 JSON Web Token 对用户进行身份验证。当我尝试从本机应用程序与 API 进行交互时,我遇到了 CORS 问题。因此,我为所有来源添加了 CORS 标头(仅适用于以 开头的 url /api/)。现在工作正常,但我想知道我所做的是否不是一个潜在的漏洞?
我应该允许所有来源吗?如果本机应用程序要请求 API,有什么方法可以提前知道 Origin 主机?
我很困惑。在此先感谢您的帮助。
我使用路由扩展了默认的Devise RegistrationsController:
# use my own controller for devise registrations
devise_for :users, :controllers => { registrations: 'registrations' }
Run Code Online (Sandbox Code Playgroud)
在这个控制器中,我有一个名为new_from_invitation的方法.此方法呈现自定义注册表单,以防用户来自邀请.
我复制了文件devise/registrations/new.html.erb.所以我的自定义注册表单如下所示:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
Run Code Online (Sandbox Code Playgroud)
这会抛出ArgumentError,因为资源是nil.与资源名称相同.不知何故,资源和resource_name帮助程序在默认的设计/注册/新方法中可用,但我无法弄清楚如何.因此无法想出让我的自定义方法可以使用这些帮助程序的方法.任何帮助将非常感谢!
所以我有一个update_all查询,如下所示:
Task.where(...).update_all('position = position - X, parent_id = Y')
Run Code Online (Sandbox Code Playgroud)
我想用整数值替换X和Y. 而且我想安全地做到:"铁路方式".知道我怎么能做到这一点?
编辑:我的rails控制器中没有位置变量.如果X = 1,则最终查询应该包含"position = position-1".
此外,update_all文档指定此方法只接受一个参数:表示SQL语句的SET部分的字符串,数组或散列.
编辑2:好吧,我通过略微调整Arup Rakshit解决方案来实现它.这是最终的工作解决方案:
Task.update_all(['position = position - ?, parent_id = ?', X, Y])
Run Code Online (Sandbox Code Playgroud) 我已经设置了一个拦截器来捕获 HTTP 响应中的错误代码。当 JWT 到期时,我有一个从服务器返回的代码 401。这是我的拦截器:
this.axios.interceptors.response.use(undefined, (error) => {
if (error.response.status === 401) {
this.$store.dispatch('auth/logout').then(() => {
this.$router.push({name: 'login'})
return Promise.reject(error)
})
}
})
Run Code Online (Sandbox Code Playgroud)
我的拦截器工作正常,除了被拦截的请求仍然解析为 .then() 部分。
this.axios.get('/texts').then(function(){
// This is still being executed and generates javascript errors because the response doesn't contain the right data
})
Run Code Online (Sandbox Code Playgroud)
从 axios 文档中,我发现您可以通过调用来防止这种情况发生
this.axios.get('/texts').then(function(){
// only on success
}).catch(function(){
// only on errors
}).then(function(){
// always executed
})
Run Code Online (Sandbox Code Playgroud)
但这非常冗长,我不想对我的应用程序发出的每个请求都执行此操作。
出现错误时如何防止 axios 执行 .then() 回调。我可以在拦截器中做些什么吗?像 event.stopPropagation() 或类似的东西?
django ×2
activerecord ×1
angularjs ×1
api ×1
axios ×1
cors ×1
devise ×1
django-urls ×1
escaping ×1
helpers ×1
interceptor ×1
javascript ×1
node.js ×1
npm ×1
npm-install ×1
promise ×1
python ×1
react-native ×1
rest ×1
scope ×1
sql ×1
web-push ×1