Node.js Application as a Windows Service (With registry fix) – Measuring programming progress by lines of code is like measuring aircraft building progress by weight.

npm install

In my case, command nssm install MyWebService… was unsuccessful, the problem was that app.js can’t find config.json file.

First you will need:

  1. Node.js application (project) which you want to run as a Windows Service
  2. Node.js
  3. NSSM

1 step: Set your Node.js application as Windows Service

Download nssm.exe and put file into you node.js project folder

Put nssm.exe file into you node.js project folder

Run Windows Command Processor (cmd.exe) as administrator and go to your node.js project folder

Your node.js project folder

Run command npm install

npm install

Run command node src\app.js and allow access through Windows firewall

Allow access through Windows firewall

Run these two commands
nssm.exe install MyWebService "C:\Program Files\nodejs\node.exe" "C:\Service\src\app.js"
net start MyWebService

net start MyWebService

Now we need to fix this error.

2 step: Edit registry

Open registry editor (regedit.exe) and go to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MyWebService\Parameters

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MyWebService\Parameters

Now we need to change AppDirectory from C:\Program Files\nodejs to C:\Service

Change AppDirectory from C:\Program Files\nodejs to C:\Service

Restart computer and don’t forget to run Apache, MySQL or any other necessary servers for your project after restart.

Node.js Application as a Windows Service

Share

package.json 里的依赖怎么写

Dependencies
可选字段,指示当前包所依赖的其他包。

{ “dependencies” :
{ “foo” : “1.0.0 – 2.9999.9999”
, “bar” : “>=1.0.2 <2.1.2”
, “baz” : “>1.0.2 <=2.3.4”
, “boo” : “2.0.1”
, “qux” : “<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0”
, “asd” : “http://asdf.com/asdf.tar.gz”
, “til” : “~1.2”
, “elf” : “~1.2.3”
, “two” : “2.x”
, “thr” : “3.3.x”
}
}
版本格式可以是下面任一种:

version 完全匹配

version 大于这个版本
=version大于或等于这个版本
=version1 <=version2.
range1 || range2 满足任意一个即可
git… Git地址
user/repo
devDependencies
可选字段。如果只需要下载使用某些模块,而不下载这些模块的测试和文档框架,放在这个下面比较不错。

peerDependencies
可选字段。兼容性依赖。如果你的包是插件,适合这种方式。

bundledDependencies
可选字段。发布包时同时打包的其他依赖。

optionalDependencies
可选字段。如果你想在某些依赖即使没有找到,或则安装失败的情况下,npm都继续执行。那么这些依赖适合放在这里。

Share

Limejs 中文指南 #1 The Timeline

时间轴

Director

一切都从Director开始,Director是所有游戏都需要的基础对象,它把所有LimeJS的逻辑连接到了网页上的单独空间。如果你熟悉flash的话,你可以把它当作stage(舞台),如果你是cocos2d用户,你可以把它视为cocos2d自身的Director。如果你对两者都不熟悉,你就把它当成一个前端控制器。

每个游戏只有一个Director。它掌控了游戏的全局viewport(视点),并且控制哪个scenes(场景)是可见的。在建立游戏逻辑的开始,你需要创建一个Director实例。它的构造函数的参数包括DOM容器元素、stage(舞台)宽和高(像素)。
var director = new dfkit.Director(document.body,320,460);

Scene

Scene(场景)是一个包含可视元素的用于覆盖整个viewport(视点)的独立部分。这表示同一时间点上只有一个scene(场景)是激活的。例如:在一般的游戏逻辑里,你可能需要一个菜单场景,一个游戏结算的场景。通过调用 director.replaceScene(scene) 或者 director.pushScene(scene)来让一个场景可视。不同点是后者不会移除之前的scene(场景),只是将其隐藏方便之后通过director.popScene()激活。

var scene = new lime.Scene();
director.replaceScene(scene);

Transitions

单纯用replaceScene()在场景间快速切换可能吸引不了眼球。为了做的更好些可以在调用replaceScene()时用 transition 和 duration 属性。transition定义了当前场景消失和新场景激活的动画效果。当前支持 Slide(滑动)和 Move(位移)以及 Dissolve(淡入)效果。

director.replaceScene(menuscene,lime.transition.SlideInRight);
director.replaceScene(gamescene,lime.transition.Dissolve,2);

ScheduleManager(调度管理)

Lime中的所有东西都是基于repaint-dirty (重绘-不一致)模式。也就是说当你每次改变了某些东西,你的方法调用并不等于 DOM或者Canvas2dContext调用。你设置的属性将会被标记为dirty并在下一帧被重绘。这允许我们只更新一次,更新那些需要更新的内容、并无状态的保存所有内容。无状态保存更新允许我们在任何时候切换渲染方法。因为JS没有提供任何on-enter-frame事件,所以我们使用了一个静态的lime.sheduleManager对象来模拟。它提供以下方法:

schedule(callback, context) – 在每一帧里调用一个方法。Context是this作用域。

unschedule(callback, context) – 清除之前的schedule方法。

scheduleWithDelay(callback, context, delay, opt_limit) – 和schedule类似,但是回调函数只有在超过delay(自上一次执行的延迟时间)秒数时候才会被调用。

callAfter(callback, context, delay) – 在delay指定的时间后调用一次回调函数。

不要在代理里使用JS自带的setTimeout()和setInterval()方法。lime.scheduleManager给你提供了能实现同一功能但却更丰富的方法。你的回调函数只有超过距离上次执行delay的时间后才会被再次执行。这使你能够让动画更加平滑,即使实在CPU性能急剧改变的情况下。

var velocity = 2;
lime.scheduleManager.schedule(function(dt){
var position = this.getPosition();
position.x += velocity * dt; // if dt is bigger we just move more
this.setPosition(position);
},ball);

 

Pausing(暂停)

使用scheduleManager代替timer发放可以充分利用暂停功能。当你希望暂停游戏时,只需调用Director对象的setPaused(true)。这将会暂停所有计划中的方法和动画。一旦你调用setPaused(false),所有的代码又会继续执行,就如同什么都没发生一般。当你的游戏暂停时,lime.PauseScene将会被激活。如果你想自定义暂停场景,你可以覆盖这个类的功能。

mygame.director.setPaused(true);

Layers(层)

现在我们准备在屏幕上放点东西了。为了更好的管理你的显示对象,我们引入了lime.Layer对象,你可以把它想象成Photoshop里的图层。Layer可以用来装东西。它和其他的可视对象的行为相同,只是它没有body和尺寸,它们只能用来包含子对象。所以你只需创建好它们,添加到树中,设置合适的位置把子对象添加进去。必须申明的是,Layer不是必须的,你可以在场景中加入任何对象,Layer让你的生活更简单。

var layer = new lime.Layer().setPosition(100,100);
scene.appendChild(layer);

for(var i=0;i<5;i++){
var box = customMakeBoxFunc().setPosition(i*50,0);
layer.appendChild(box);
}

 

 

Share

[无法打开 站点 ,已终止操作] 的解决方法

打开网页时,提示“internet explore 无法打开internet站点…,已终止操作”,是js引发的错误。
加上一个载入判断就可以了。if (document.readyState!=”complete”) return ;

“internet explore 无法打开internet站点…,已终止操作”,从此消失

Share