小编Chr*_*ois的帖子

我可以通过bluebird在节点全局范围内的实现来覆盖ES6的Promise吗?

我想使用bluebird实现Promise/A +开放标准并覆盖原生ES6 Promises.我还希望bluebird实现在我随后导入的模块中随处可用,而不必在每个模块中都需要它.Bluebird的入门页面告诉我:

var Promise = require("bluebird");
Run Code Online (Sandbox Code Playgroud)

,这会导致覆盖本机Promise元素.因为bluebird是规范的超集,所以它不会破坏现有代码,因此应该是安全的.

但是,因为我知道这被认为是不好的做法:

  1. 扩展或替换语言本地人,和
  2. 定义全局变量以在依赖于它的需求链中使用

当我想在节点应用程序的基本脚本中包含它时,我很谨慎:

import Promise from 'bluebird';
global.Promise = Promise;
Run Code Online (Sandbox Code Playgroud)

这是一种不好的做法吗?我应该坚持在每个文件中导入bluebird吗?

javascript overriding node.js promise bluebird

21
推荐指数
1
解决办法
5028
查看次数

保护 SSR Nuxt.js(或普通 Vue.js)中仅认证路由的源代码

我使用带有nuxt.render中间件的 Express 后端来整合我的 API、前端和开发环境。到目前为止,一切都很顺利,但我对我的身份验证设置的安全性有一些担忧。

我的后端通过 Nuxt 中间件将其用户会话注入 Vuex。虽然这对于限制访问非常有效,但这些文件的源代码始终可以通过直接 GET 方法获得。(例如,如果/admin受保护,/_nuxt/admin.js将仍然可用,并将包含该页面的整个源代码)。最糟糕的是,由于preloadNuxt 放置在头部的默认链接,即使未登录,它们也会自动获取。

我知道这没有很多安全问题,因为我的管理 API 调用在服务器端强制执行身份验证,但有时(就我而言),公开源代码是不可取的。

我想出了一个很好的解决方案,虽然不是很优雅:

  1. nuxt.config.js,我设置render.resourceHints = false。我希望我不必这样做就可以从可用路由的预取中受益,但似乎没有办法限制预取路由的选择。

  2. 在插入next.renderExpress 的中间件链之前,我有选择地限制页面的源代码。(例如app.get('/_nuxt/pages/admin.js', restrict),如果未通过身份验证,则restrict返回一个中间件,如果是401,则调用next()。这会阻止 XHR 获取和直接 GET。)

  3. 我制作了一个自定义error.vue模板,在那里我捕获了 Nuxt 如果被迫访问用户不应访问的路由时将抛出的错误消息,看起来像Loading chunk 1 failed,并将其规范化为“禁止”错误页面。

是否有我想念的更务实的方法,或者这超出了 Nuxt.js 目前提供的范围?

security authentication vue.js server-side-rendering nuxt.js

5
推荐指数
0
解决办法
792
查看次数

透明的<hr>用于响应式垂直间距:它真的是无意义的吗?

我已经开始使用一种技术来处理前端设计中的垂直间距,该技术使用透明<hr>的间距元素.我知道这归咎于大多数网络社区的仇恨,但我仍然认为这是处理特殊情况的好方法.以下是好处:

  1. <hr> 是一个自动关闭的标签,所以它在标记上很友好
  2. 它的语义目的(根据MDN)是用一个部分表示主题中断主题转移.MDN还预先确定它现在用语义术语定义,而不是表示术语,这意味着<hr>只占空间的不可见不会反对元素的语义.
  3. 跨浏览器很容易保持一致的风格
  4. 我们可以在其中构建响应行为

我非常清楚标记和样式之间需要分离.然而,在响应式设计中,元素之间的垂直间距有时是繁琐的,并且在我看来,它通常比语义标记具有更高的价格.

一种常见的方法是使用手动样式处理特殊情况:当基于组件的类(如.my-special-recurring-element不够精确)(假设这个特定的类太靠近它下面的元素)时,请#special-element-that-requires-spacing手动添加id 并设置样式,这样就变成了很难维护:

/* Ensure that the special element is not too close to the footer in mobile */

#special-element-that-requires-spacing {
  margin-bottom: 1rem;
}

@media screen and (min-width: 640px) {
  #special-element-that-requires-spacing {
    margin-bottom: 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

这就是为什么像TachyonsBasscss这样的CSS实用工具包近年来变得越来越流行的原因.它允许使用内联类调整垂直间距,并具有直接响应处理的附加好处.我们现在可以像这样编写我们的HTML(Tachyons中的例子):

<div class="my-special-recurring-element mb1 mb0-ns"></div>
Run Code Online (Sandbox Code Playgroud)

其中.mb1粗略意味着在我们的尺寸范围内应用1的边距底部,并且mb0-ns意味着在非小视口宽度中应用边距为零的底部.这对于前端设计来说肯定更实用,但它经常变得杂乱无章 - …

html css frontend semantic-markup

1
推荐指数
1
解决办法
494
查看次数