我最近开始将React和Flux用于我的项目,我也在使用jQuery,用于GUI的某些部分.通过jQuery,我有时会将CSS类和样式甚至DOM节点添加到由React创建和更新的元素中.这似乎工作得很好.React没有抱怨,并且,当render()重新运行时,React不会修改类和样式以及已添加到反应根内部某处的DOM节点.
我可以依赖React忽略我在React树中与React DOM节点并排添加的DOM节点吗? - 我知道如果React决定删除我插入的节点,将删除非React节点.这对我很好.但我确实想知道React某一天是否会对这些不是由React管理的额外节点感到不安,并拒绝工作?
如果React不管理DOM节点的任何样式(我没有style为生成的节点添加任何属性render()),那么我可以通过jQuery安全地将自己的样式添加到这个DOM节点吗?例如,#id在jQuery中查找节点,然后设置其宽度.
如果classNameReact生成的DOM节点上没有,那么我可以安全地通过jQuery添加和删除该节点的类吗?(例如,在鼠标悬停时添加一个类.)
我目前正在做这些可能奇怪的事情的一个原因是,我有一些jQuery汤遗留代码,我现在不想移植到React.另一个是我正在使用一些有时在React树中添加DOM节点的jQuery插件.
我在 Docker 容器中运行 Nginx,出于安全原因,我希望尽可能多地删除 Linux 功能。
然后我可以放弃哪些能力?
该镜像类似于此处的标准 Docker Nginx Alpine 镜像:https : //github.com/nginxinc/docker-nginx/blob/0c7611139f2ce7c5a6b1febbfd5b436c8c7d2d53/mainline/alpine/Dockerfile,它以 root 身份启动 Nginx,然后以 root 身份运行工作进程用户'nginx',看:
root@instance-1:/opt/ed# docker-compose exec web bash
bash-4.3# # Now we're inside the container.
bash-4.3# ps aux
PID USER TIME COMMAND
1 root 0:00 /bin/sh -c /etc/nginx/run-envsubst.sh && nginx
10 root 0:00 nginx: master process nginx
11 nginx 0:00 nginx: worker process
12 nginx 0:00 nginx: cache manager process
14 root 0:00 bash
18 root 0:00 ps aux
Run Code Online (Sandbox Code Playgroud)
侦听端口 80 和 …
有没有一些首选的方法来设计Specs2测试,有很多测试依赖于以前的测试结果?
下面,您将找到我当前的测试套件.我不喜欢var测试片段之间的s.然而,它们是"需要的",因为一些测试生成后续测试重用的ID号.
我是否可以将ID号存储在Specs2 Context中,或者创建一个包含所有可变状态的单独Object?并且只在测试对象中放置测试片段?还是有一些更好的方法?
如果测试失败,我想取消相同深度的剩余测试.我可以让测试片段相互依赖吗?(我知道我可以在一个测试片段中取消剩余的匹配器(通过使用可变测试,或通过orSkip),但是取消整个片段呢?)
.
object DatabaseSpec extends Specification {
sequential
"The Data Access Object" should {
var someId = "" // These var:s feels error prone, is there a better way?
"save an object" >> {
someId = database.save(something)
someId must_!= ""
// I'd like to cancel the remaining tests, below, at this "depth",
// if this test fragmen fails. Can I do that?
// (That is, cancel "load one object", "list …Run Code Online (Sandbox Code Playgroud) 我正在考虑尝试从HTML中的数据初始化(部分)AngularJS模型,而不是向服务器请求将数据作为JSON获取,或者直接在页面中嵌入JSON对象.
(服务器目前只使用HTML(而不是JSON)呈现数据,我现在想避免重写"太多"代码,而且HTML适用于搜索引擎.应用程序本身就是一个讨论系统.)
下面是我的HTML(简化)示例.其中嵌入的数据是帖子ID(123456),作者ID(789),作者姓名(Kitty霸主)和文本消息("Kittens Cats!Just kidding. ").
<div id="post-123456">
<div class="dw-p-hd">
By <span data-dw-u-id="789">Kitty overlord</span>
</div>
<div class="dw-p-bd">
<p>Kittens</p><p><strike>Cats! Just kidding.</strike></p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我想构建一个AngularJS控制器,并初始化$scope为:
$scope = {
postId = 123456,
authorId = 789,
text = 'Kittens ....',
}
Run Code Online (Sandbox Code Playgroud)
也许我可以ng-init像这样使用:
<div id="post-123456"
ng-controller="CommentCtrl"
ng-init="{ postId =..., authorId =..., text =... }"> <--- look here
<div class="dw-p-hd">
By <span data-dw-u-id="789">Kitty overlord</span>
</div>
<div class="dw-p-bd">
<p>Kittens...</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
但后来我会发送两次数据:一次进入ng-init,一次进入HTML.我想我宁愿ng-init以某种方式跳过这个属性.
无论如何你认为这是一个好的方法吗?
或者它不可能/不好,我应该做别的事情呢?
有没有办法避免两次包含数据?(在html和in中都有 …
如何从旧的遗留jQuery汤代码中更改React组件的状态?
我有这样的组件:
var AComponent = React.createClass({
getInitialState: function() {
return { ids: [] }
},
render: function() {
...
},
onButtonClick: function() {
ids.splice(…); // remove the last id
}
});
Run Code Online (Sandbox Code Playgroud)
当旧的jQuery汤代码中出现特殊情况时,我想将id推送到AComponent.state.ids.我怎样才能做到这一点?
一个"明显"的解决方案是反模式; 这里是:
var componentInstance = AComtonent({});
React.renderComponent(componentInstance, document.getElementById(...));
// Somewhere else, in the jQuery soup. Something special happens:
componentIntance.state.ids.push(1234);
componentIntance.setState(componentInstance.state);
Run Code Online (Sandbox Code Playgroud)
根据Facebook开发人员的这封电子邮件,这是一个反模式,因为他写道componentInstance可能会被React破坏.
SQL左连接查询忽略左表ON column = constant上的谓词。
但是,它关心右表上的另一个谓词。ON column = constant
如果我将左表移动ON column = constant到 WHERE 子句,则查询将按预期工作。
对于左表,如果我将 放在column = constant查询的 WHERE 部分或查询的 JOIN ... ON 部分,这有什么关系?
(发生的情况是,左表ON column = constant条件被推到了“JOIN Filter”步骤,在那里它似乎被忽略了。)
细节:
EXPLAIN ANALYZE
select * from DW1_PAGE_PATHS t left join DW1_PAGES g
on t.TENANT = g.TENANT
and t.PAGE_ID = g.GUID
and g.GUID = 'abcdefg' -- works
and t.CANONICAL = 'C' -- "ignored", unless moved to `where` …Run Code Online (Sandbox Code Playgroud) 我正在使用ScalaTest集成测试Play Framework应用程序.这:
org.scalatest.Suites(list-of-specifications)
执行规范列表中的每个测试.但是,如何避免每个规范也独立执行?他们被处决了两次.
一个例子:
import org.scalatest.{Suites, FreeSpec}
class BrowserSuiteSpec extends Suites(new AnonLoginSpec)
class AnonLoginSpec extends FreeSpec { ... }
Run Code Online (Sandbox Code Playgroud)
现在我AnonLoginSpec执行两次 - 首先作为BrowserSuiteSpec的一部分,然后独立执行,因为它是一个FreeSpec类.(更改AnonLoginSpec为特征会导致编译错误.)
重命名AnonLoginSpec到AnonLoginSpeX没有任何效果-它仍然被执行了两次.
(我想也许ScalaTest正在寻找"Spec"后缀,我认为Specs2会这样做.)
文档没有提到这个问题(据我所知).
如果浏览器是Tor浏览器,我想禁用我正在构建的Web应用程序的某些功能.我可以在浏览器内部(客户端,而不是服务器端)查看浏览器是否是Tor浏览器?
我更喜欢没有发出任何HTTP请求的解决方案,以使浏览器的IP与Tor出口节点相匹配.
背景:在我的例子中,Tor Browser会弹出一个对话框,询问用户"Tor Tor Browser是否允许此网站提取HTML5画布图像数据?" 因为,Tor Browser说,画布图像数据可用于唯一标识浏览器.
更新:阅读下面的答案后:在我的情况下,也许最好的解决方案是保留服务器端的Tor出口节点列表(最新列表,定期刷新),当浏览器加载页面时,我设置<script>标签中的变量,如果浏览器的IP与这样的出口节点匹配:var isProbablyTorBrowser = true.然后,客户端,不需要额外的请求或复杂的逻辑.
有一个旧的数据库测试套件,我正在尝试从Specs迁移到Specs2.但是,Specs2以一种奇怪的顺序运行测试(从我的角度来看),它打破了测试,因为它们改变了数据库状态,并运行了两次特定的代码.
在下面找到测试的简化版本.据我了解,试验应该按以下顺序执行:(因为我指定的顺序): ,,
! 222
然而,实际发生的事情,是他们在这个顺序执行会:,,! 333! 444
! 333! 222! 444
以下是测试:
object IncludedSpec extends Specification {
sequential
println("sssstart")
"IncludedSpec" should {
println("..222")
"context free block" >> {
println("....! 222 the first test")
1 === 1
}
var variableN = 0
"block with context" >> {
println("....333")
"using one variable" >> {
println("......! 333 doing some tests and setting variableN")
variableN = 123
}
println("....444")
"using it again" >> {
println("......! …Run Code Online (Sandbox Code Playgroud) 我想编写一个可以在生产服务器上运行的Bash脚本。它将从Docker集线器下载Docker映像,启动它并保持生成的容器运行。在容器内部,我正在使用Supervisor来保持服务器和数据库的运行,并且Supervisor会重启死在容器内部的所有进程。
但是容器本身又如何-是否有任何建议/最佳实践来确保容器在重新引导主机后启动,以及如何在容器因某种原因崩溃时重新启动?有一个可以给的--restart标志docker run。因此,要确保容器启动并保持运行,只需将这行添加到/etc/rc.local?
docker run -d --restart=always --name=container-name image-name command
Run Code Online (Sandbox Code Playgroud)
对?(而且我不需要使用nohup或任何方法&。)或者我忽略了这种方法是否存在问题,或者我缺少什么其他问题?
例如,我不需要以某种方式确保docker服务本身保持正常运行吗?我可以相信它还活着吗?
(相关问题,但仅关于保持docker运行,而不是在重新启动时启动:确保给定的docker容器正在运行)
我的主机和容器操作系统:Ubuntu 14.04。
如果我用没有参数值的查询字符串设计我的 REST API,你能想到什么缺点?像这样:
http://host/path/to/page?edit
http://host/path/to/page?delete
http://host/path/to/page/+commentId?reply
Run Code Online (Sandbox Code Playgroud)
而不是例如:
http://host/api/edit?page=path/to/page
http://host/api/delete?page=path/to/page
http://host/api/reply?page=path/to/page&comment=commentId
Run Code Online (Sandbox Code Playgroud)
(编辑:任何page-X?edit和page-X?delete链接将触发 GET 请求,但不会实际编辑或删除页面。相反,它们显示一个页面<form>,其中page-X可以编辑,或者显示<form>一个真正删除页面-X?确认对话框。该实际编辑/删除请求将POST或DELETE请求。在相同的方式host/api/edit?page=path/to/page显示与编辑页面<form>。/编辑。)
请注意,这?action不是查询字符串通常的格式。相反,它们的格式通常如下:?key=value;key2=v2;key3=v3
此外,有时我会使用这样的 URL:
http://host/path/to/page?delete;user=spammer
Run Code Online (Sandbox Code Playgroud)
也就是说,我将包含一个没有值 ( delete)的查询字符串参数和一个具有值 ( user=spammer) 的参数(为了删除垃圾邮件发送者发布的所有评论)
我的 Web 框架可以很好地处理像?reply. 所以我想我最想知道的是,你能想到任何客户端问题吗?或者有什么问题,我应该决定使用另一个 Web 框架吗?(您知道您使用的框架是否提供有关没有参数值的查询字符串的信息吗?)
(我通过阅读http://labs.apache.org/webarch/uri/rfc/rfc3986.html 的理解是,我使用的查询字符串格式很好,但这对所有客户端和服务器框架有什么影响。)
(我目前使用 Lift-Web 框架。我也测试了 Play Framework,并且可以获取无值的查询字符串参数,所以从我的角度来看,Play 和 Lift-Web 似乎都不错。)
这是一个关于没有值的查询字符串的相关问题。但是,它处理null在某些情况下返回的 ASP.NET 函数:Access Query string …
我有一个表,其中包含[主键计数器],用于[另一个表中的每页评论]。
\n这些主键是每页的:对于每个页面,评论 ID 从 1 开始。
我想自动分配 10 个 ID 来写入 10 条新评论。
\n \xe2\x80\x94 我可以使用 PostgreSQL 和 JDBC 执行此操作吗?
(您有任何示例/相关 JDBC 文档的链接吗?)
\n\n我只找到了有关如何使用returning新插入行的主键的示例,其中使用了一些getGeneratedKeys在我的情况下似乎没有用的示例。
***
\n\n我认为 SQL UPDATE 语句看起来像这样:
\n\nupdate PAGES\nset NEXT_COMMENT_ID = NEXT_COMMENT_ID + 10\nwhere PAGE_ID = ? <-- next-comment-id is *per page*\nreturning NEXT_COMMENT_ID into ?\nRun Code Online (Sandbox Code Playgroud)\n\n因此,不同的线程和服务器不会尝试重用/覆盖相同的 ID(对吗?)。
\n