小编Eva*_* P.的帖子

如何在NodeJS中获得自定义错误类的正确回溯?

我对在JavaScript中制作自定义Error类的"正确"方法的理解是这样的:

function MyError(message) {  
    this.name = "MyError";  
    this.message = message || "Default Message";  
}  
MyError.prototype = new Error();  
MyError.prototype.constructor = MyError;
Run Code Online (Sandbox Code Playgroud)

(代码片段来自https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error.)

使用NodeJS,如果我尝试检查这种类型的错误,如:

var err = new MyError("whoops");
assert.ifError(err);
Run Code Online (Sandbox Code Playgroud)

...回溯将显示我在编译时创建的Error对象的上下文,它是MyError的原型,而不是我用"new MyError()"创建的MyError对象.

有没有什么方法可以获得实际错误的正确回溯数据,而不是原型?

javascript inheritance custom-errors node.js

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

如何在node.js中的单个进程内同步对文件的访问?

我有一个Web服务器,可以读写磁盘上的数据文件.我想只在一个Web请求中写入一个文件.

这是一个示例程序,说明了我的问题.它将状态文件保存在"/tmp/rw.txt"中,并在每次Web命中时增加整数内容.运行此程序,然后运行类似的程序ab -n 10000 -c 1000 http://localhost:3000/,表明通过多次点击从文件中读取相同的值,并且它被多次写入.

注意:我知道flock()和fs-ext.但是,flock()会将文件锁定到当前进程; 因为这里的所有访问都在同一个进程中,所以flock()不起作用(并且大大复杂化了这个例子).

另请注意,我通常使用express,async等来完成大部分工作; 为了举例,只是坚持基础.

var http = require("http"),
    fs = require("fs");

var stateFile = "/tmp/rw.txt";

var server = http.createServer(function(req, res) {

    var writeNum = function(num) {
        var ns = num.toString(10);
        console.log("Writing " + ns);
        fs.writeFile(stateFile, ns, function(err) {
            if (err) {
                res.writeHead(500, {"Content-Type": "text/plain"});
                res.end(err.message);
            } else {
                res.writeHead(200, {"Content-Type": "text/plain"});
                res.end(ns);
            }
        });
    };

    switch (req.url) {
    case "/reset":
        writeNum(0);
        break;
    case "/":
        fs.readFile(stateFile, function(err, data) {
            if …
Run Code Online (Sandbox Code Playgroud)

synchronization flock fs node.js

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