我正在尝试找到一种方法来了解服务器上是否有待处理的请求,以便我可以等待它们完成以正常关闭服务器。到目前为止我尝试过的是:
var express = require("express");
var app = express();
var count = 0;
app.use(function(req, res, next){
count++;
console.log(count);
next();
res.on("end", function(){ //PROBLEM HERE! This event does not exists!!!
count = count - 1;
console.log(count);
});
});
app.get("/", function(req, res, next){
res.send("Ok!");
});
process.on('SIGINT', function () {
if(count === 0) process.exit();
else console.log("Can't shutdown! Pending requests...");
});
var server = app.listen(8021);
Run Code Online (Sandbox Code Playgroud)
那么处理这种情况的最佳方法是什么???我被困住了。
编辑:这应该是一项相当简单的任务。根据http://nodejs.org/api/net.html#net_server_close_callback
停止服务器接受新连接并保留现有连接。该函数是异步的,当所有连接结束并且服务器发出“close”事件时,服务器最终关闭。或者,您可以传递回调来侦听“关闭”事件。
我可以简单地做:
process.on('SIGINT', function () {
console.log("Exiting");
server.close();
server.on("close", function(){
console.log("Exited");
process.exit(0);
});
});
Run Code Online (Sandbox Code Playgroud)
但我的回调on …
我使用以下css来设置删除标记的按钮的文本:
button.close:after {
content: '×';
}
Run Code Online (Sandbox Code Playgroud)
这会产生一个好看的按钮,如下所示:
但是随机的字符串×会被字符串替换掉Ã-.我首先想到这可能与编码有关,但如果确实是问题,我认为这不会随机发生.它发生在一个低频率,此时它没有发生(一旦它再次发生,将用另一个打印屏幕更新问题).
这个css代码来自.less我正在编译然后缩小然后连接的文件.
如何确保字符串×始终显示?
我目前正在阅读很多关于微服务的内容,但我仍然不了解某些部分.我做了以下抽奖:
每个微服务有2个访问:
如果我想登录,我可以发送一个Http请求到我的身份验证服务.但是,如果我想访问需要您已连接的Stuff服务呢?
假设用户想要显示数据库STUFF中可用的东西,服务Stuff将首先检查连接用户的"令牌"是否正确,通过与Authentication服务交换,然后返回东西或"登录"要求".
所以我不明白的是,如果需要连接客户端的每个服务需要与身份验证交换,那么它将创建一个巨大的互联网流量,以便检查每个用户请求..所以我虽然做一个身份验证服务每个服务,但由于我应该只有一个数据库,那么数据库会减慢流量吗?
另外,如果我理解,每个微服务应该在不同的服务器上,而不是同一个服务器上?
我希望我很清楚,不要犹豫,要求更多细节!
提前致谢 :)
马克斯
根据@ notionquest的回答:
所以它看起来应该更合适吗?
此外,根据Peter的评论,每个服务都可以实现自己的中间件(如上所述的JWT),因此API网关只是一个"传递".但是,我觉得这对我来说不是很好,因为每个服务都会对每个内部交换进行一次令牌检查,不是吗?
对于这些东西,它很容易,因为它只检查一次令牌.现在,让我们说,在用户拿到东西后,他选择一个并想购买它.然后"购买服务"将调用服务服务,以验证项目的价格,但是...它将必须检查用户令牌,因为这些东西是"经过身份验证的访问",因此这意味着"购买" "服务和"东西"服务都检查令牌,这增加了额外的检查.
我虽然关于服务之间的内部保证访问但是它值得吗?
此外,也许你说为每个服务实现中间件,因为他们有REST访问权限,但API网关只会破坏拥有REST访问权限的想法
我的问题是平台即服务究竟是什么,以及我的IaaS和SaaS概念是否真的正确.
IaaS:当您在机器级别指定您的需求时,您正在使用IaaS,这意味着当您能够决定托管在云上的应用程序是在1.7GHz机箱还是2.5Ghz机箱内运行时.甚至你需要多少箱子.
SaaS:当您在用户级别使用托管在互联网上的软件时.因此,如果您使用Google Docs,则使用SaaS.
我无法明确表示什么是平台即服务.当我读到这样的东西时,我的怀疑就出现了:
云计算已经发展到包括用于构建和运行自定义应用程序的平台,这个概念被称为"平台即服务"(或称为PaaS).PaaS应用程序也称为按需,基于Web或软件即服务(或SaaS)解决方案.[ http://www.salesforce.com/paas/ ]
这是否意味着PaaS和SaaS是一样的?我现在还不能理解,而且我不确定PaaS是什么时候出租,例如,云上的数据库,比如说,SQL Azure ......你租的东西不是直接的基础设施,也不是软件,而是帮助您开发最终SaaS产品的东西.我对吗???
我不明白:为什么我的插入排序实现每次跳过合并排序,对于任何大小的n?
public List<Int32> InsertionSort(List<Int32> elements, Boolean ascending = true)
{
for (Int32 j = 1; j < elements.Count; j++)
{
Int32 key = elements[j];
Int32 i = j - 1;
while (i >= 0 && (elements[i].CompareTo(key) > 0) == ascending)
elements[i + 1] = elements[i--];
elements[i + 1] = key;
}
return elements;
}
Run Code Online (Sandbox Code Playgroud)
public List<Int32> MergeSort(List<Int32> elements, Boolean ascending = true)
{
Sort(elements, 0, elements.Count - 1);
return elements;
}
private void MergeSort(List<Int32> elements, Int32 startIndex, Int32 …Run Code Online (Sandbox Code Playgroud) 任何人都可以解释foll JS函数如何验证日期,需要的形式为mm/dd/yyyy.
<script type="text/javascript">
function checkdate(input){
var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity
var returnval=false
if (!validformat.test(input.value))
alert("Invalid Date Format. Please correct and submit again.")
else{ //Detailed check for valid date ranges
var monthfield=input.value.split("/")[0]
var dayfield=input.value.split("/")[1]
var yearfield=input.value.split("/")[2]
var dayobj = new Date(yearfield, monthfield-1, dayfield)
if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
alert("Invalid Day, Month, or Year range detected. Please correct and submit again.")
else
returnval=true
}
if (returnval==false) input.select()
return returnval
}
</script>
Run Code Online (Sandbox Code Playgroud) 嘿伙计们,最近我正在学习一些Java,当我被教导一种实现控制器类的方法时,它的重要性是将请求重定向到一个Action,它执行指定的工作.这就是我学到的方式;
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
String clazz = req.getRequestURI().replaceAll(req.getContextPath() + "/", "").replaceAll(".java", "");
((Action)Class.forName("com.myProject.actions." + clazz).newInstance()).execute(req, res);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道WebForms也适用于HANDLERS,这是一种行为.例如,每个.aspx页面都继承自Page对象,该对象是该指定页面的处理程序.
我无法弄清楚的是,哪个类首先获取请求并将其转换为指定的操作(页面处理程序)?它是WebForms功能(实现)还是IIS的可接受性?那么,哪个类代表WebForms的主控制器?
非常感谢你.
当我尝试更改位置时,我遇到了问题.我已连接到地图
var mapOptions = {
zoom: 7,
center: new google.maps.LatLng(48.379433, 31.165579999999977),
mapTypeControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
Run Code Online (Sandbox Code Playgroud)
现在我需要在地图上更改位置
<select onChange="changeCity()" id="city"><option value="50.4501, 30.523400000000038">????</option><option value="49.839683, 24.029717000000005">?????</option></select>
Run Code Online (Sandbox Code Playgroud)
为此,我正在使用:
function changeCity() {
var city = document.getElementById('city').value;
var city_1 = new google.maps.LatLng(city);
map.setCenter(city_1);
}
Run Code Online (Sandbox Code Playgroud)
但没有任何反应(我看到灰色区域).请帮忙...!
我正在使用Yeoman创建一个生成器,而Yeoman又使用underscore.js模板.
在给定的文件中,我有这个代码:
var
<% _.each(requires, function(require) { %>
<% if(require.shouldApply) { %>
<%= _.camelize(require.name) %> = require('<%= require.name %>'),
<% } %>
<% }); %>
mongoose = require('mongoose'),
Schema = mongoose.Schema;
Run Code Online (Sandbox Code Playgroud)
鉴于require.shouldApply有时是假的我不希望产生空白行.
所以,例如,对于输入requires: [{shouldApply: false, name: 'zoo'}, {shouldApply: false, name: 'foo'}, {shouldApply: true, name: 'bar'}]我得到这个:
var
zoo = require('zoo'), //note that the line below is blank
bar = require('bar'), //I don't want the blank line above
mongoose = require('mongoose'),
Schema = mongoose.Schema;
Run Code Online (Sandbox Code Playgroud)
有谁知道如何防止underscore.js模板创建这些不需要的空白行?
我有一个供家族企业使用的网站.我只有几页和一些产品目录.不会有任何在线交易或付款.只是一些html页面,javascript文件和存储在xml文件中的产品目录.
我想知道如何确保我的网站被黑客攻击相当安全?我能做什么,至少实现一定程度的安全性,例如,我该怎样做才能确保我的xml文件不会被某人更改或访问?
我无处可寻.我想在gridview中的数据绑定表达式中引用行对象本身,如下所示:
<asp:TemplateField HeaderText="Description">
<ItemTemplate>
<asp:Label runat="server"
Text = '<%# GetPendingReason(Eval("this")) %>' />
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为"this"不涉及任何属性.引用单个属性可以正常工作,但是如何引用当前行?
我有依赖注入的麻烦,因为我对Seam很新,我可能会以错误的方式做某事!
我需要在一个从控制器内触发的新线程上注入依赖项 - 我没有例外,但它们只是来了null.首先,我尝试d1在线程中重复使用(见下文),但是null我有了这个想法,再次注释这个对象@In...不幸的是同样的事情发生了(得到了空)!
@Scope(ScopeType.CONVERSATION)
@Name("myController")
public class MyController{
@In(create = true)
private Dependency1 d1; //ok, gets injected with no problems!
public void importantMethod(){
//this part of the method is important and is fast
//but below comes an expensive part that takes some minutes
new Thread(new Runnable(){
@In(create = true)
private Dependency1 anotherD1; //I still need d1 here!!!
@Override
public void run(){
//I want to run expensive code here.
//A new thread …Run Code Online (Sandbox Code Playgroud) 我已经尝试了一整天,似乎无法找出它为什么不起作用.我认为问题在于我使用JavaScript语言的技巧.我可能会错过一些关于参数传递的概念.你能告诉我错误在哪里吗?
这是我的实现,基于我一年前在C#中编写的另一个实现,可以在这里找到.
所以这里是代码(您可以直接在Chromes控制台上尝试,只需复制/粘贴它就会"工作"):
function merge(A, p, q, r){
var n1 = q - p + 1;
var n2 = r - q;
var i = 0;
var j = 0;
var L = [];
while (i < n1){
L.push(A[p + i++]);
}
var R = [];
while(j < n2){
R.push(A[q + j++ + 1]);
}
L.push(Number.MAX_VALUE);
R.push(Number.MAX_VALUE);
i = 0;
j = 0;
var k = p;
while(k <= r){
if(L[i] <= R[i]){
A[k] = L[i];
i = …Run Code Online (Sandbox Code Playgroud)