我从一个不同的SO问题得到了这个代码,但节点抱怨使用process.stdin.setRawMode而不是tty,所以我改变了它.
之前:
var tty = require("tty");
process.openStdin().on("keypress", function(chunk, key) {
if(key && key.name === "c" && key.ctrl) {
console.log("bye bye");
process.exit();
}
});
tty.setRawMode(true);
Run Code Online (Sandbox Code Playgroud)
后:
process.stdin.setRawMode(true);
process.stdin.on("keypress", function(chunk, key) {
if(key && key.name === "c" && key.ctrl) {
console.log("bye bye");
process.exit();
}
});
Run Code Online (Sandbox Code Playgroud)
在任何情况下,它只是创建一个完全没有响应的节点进程,什么都不做,第一个抱怨tty,然后抛出错误,第二个什么都不做,并禁用Node的本机CTRL+ C处理程序,所以它甚至没有退出节点,当我按下.如何在Windows中成功处理Ctrl+ ?C
我正在尝试让Mocha观看我的项目进行测试并不断运行测试但是当我使用-w标志时我得到一个错误.
这里测试执行正常:
C:\Foo>mocha
.
? 1 tests complete (3ms)
Run Code Online (Sandbox Code Playgroud)
在这里 -w
C:\Foo>mocha -w
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: No such module
at EventEmitter.<anonymous> (node.js:392:27)
at Object.<anonymous> (C:\Users\Greg\AppData\Roaming\npm\node_modules\mocha\bin\_mocha:203:11)
at Module._compile (module.js:441:26)
at Object..js (module.js:459:10)
at Module.load (module.js:348:31)
at Function._load (module.js:308:12)
at Array.0 (module.js:479:10)
at EventEmitter._tickCallback (node.js:192:40)
Run Code Online (Sandbox Code Playgroud)
我在全局安装了Mocha(npm install -g mocha)并且应该在本地安装到项目中.
我在64位Windows 7家庭高级版上使用节点v0.6015,Mocha 1.0.1和0.6.1.
我用以下代码创建了一个简单的test.py:
import sys
res = sys.stdin.read()
print(res)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试跑步时
python test.py
Run Code Online (Sandbox Code Playgroud)
然后我输入
hello
Run Code Online (Sandbox Code Playgroud)
并通过Ctrl+ 结束输入z,我得到以下消息:
4 [sig] bash 11516! sigpacket::process: Suppressing signal 18 to win32 process (pid 10620)
Run Code Online (Sandbox Code Playgroud)
我不知道出什么问题了。
从外部信号优雅地退出 Node.js 程序的最佳实践是什么?
我目前在我的代码中使用它:
process.on( 'SIGINT', function() {
console.log( "\ngracefully shutting down from SIGINT (Crtl-C)" )
// some other closing procedures go here
process.exit( )
})
Run Code Online (Sandbox Code Playgroud) 我的设置如下:
server.js 要求 utils.jsutils.js 将数据从mongodb加载到内存并导出它server.js使用utils.js导出的变量我担心的问题是mongodb调用是异步的.utils.js在mongodb调用完成之前返回,这意味着server.js在require之后继续执行时将使用未定义的变量.
解决这个问题的最佳方法是什么?我唯一能想到的是将我的server.js代码包装在一个巨大的回调中,并将其传递给进行mongodb调用的函数.对我来说似乎有点乱,有没有更好的方法呢?
码:
server.js
var utils = require("./modules/utils.js");
console.log(utils);
//Do whatever
utils.js
var mods = [];
var db = require("mongojs").connect("localhost", ["modules"]);
db.modules.find({}, function(err, modules){
mods = modules;
});
module.exports = mods;
Run Code Online (Sandbox Code Playgroud) node.js ×4
asynchronous ×1
copy-paste ×1
javascript ×1
mocha.js ×1
python ×1
require ×1
signals ×1
stdin ×1
winapi ×1
windows-7 ×1