小编Ron*_*len的帖子

Mongoose条件要求验证

我正在使用mongoose并试图设置一个自定义验证,告诉该属性是否需要(即非空)如果另一个属性值设置为某事.我正在使用以下代码:

thing: {
type: String,
validate: [
    function validator(val) {
        return this.type === 'other' && val === '';
    }, '{PATH} is required'
]}
Run Code Online (Sandbox Code Playgroud)
  • 如果我保存模型{"type":"other", "thing":""}失败正确.
  • 如果我保存的模型{"type":"other", "thing": undefined}{"type":"other", "thing": null}{"type":"other"}将验证功能永远不会执行,而"无效"的数据被写入到数据库.

validation mongoose

8
推荐指数
2
解决办法
5681
查看次数

在不超出堆栈限制的情况下迭代或递归大量函数的最佳方法是什么?

我有一个应用程序,我正在Node.js编写,需要进行大量的配置和数据库调用,以处理用户数据.我遇到的问题是,在11,800多个函数调用之后,Node会抛出一个错误并退出进程.

错误说明:RangeError:超出最大调用堆栈大小

我很好奇是否有其他人已经出现这种情况,并知道他们是如何处理这个问题的.我已经开始将我的代码分解为几个额外的工作文件,但即便如此,每次处理数据节点时,它都需要触摸2个数据库(最多25次调用以更新各种表)并进行一些清理检查.

我完全愿意承认,如果是这种情况,我可能会做一些非最佳的事情,但如果有更优化的方式,我会很感激.

以下是我在数据上运行的代码示例:

app.post('/initspeaker', function(req, res) {
    // if the Admin ID is not present ignore
    if(req.body.xyzid!=config.adminid) {
        res.send( {} );
        return;
    }

    var gcnt = 0, dbsize = 0, goutput = [], goutputdata = [], xyzuserdataCallers = [];

    xyz.loadbatchfile( xyz.getbatchurl("speakers", "csv"), function(data) {
        var parsed = csv.parse(data);
        console.log("lexicon", parsed[0]);

        for(var i=1;i<parsed.length;i++) {
            if(typeof parsed[i][0] != 'undefined' && parsed[i][0]!='name') {
                var xyzevent = require('./lib/model/xyz_speaker').create(parsed[i], parsed[0]);
                xyzevent.isPresenter = true;
                goutput.push(xyzevent);
            }
        }
        dbsize = goutput.length;

        xyzuserdataCallers = [new xyzuserdata(), …
Run Code Online (Sandbox Code Playgroud)

javascript couchdb node.js express

7
推荐指数
1
解决办法
3680
查看次数

用"严格使用"是否"坏线断裂"已经过时了?

请假设'使用严格'; 并且还假设,JSLint已启用且错误不能被忽略.

我发现运算符和','启动列表更具可读性,

例如:

var i = 0
    , j = 1
    , someLongVariablename1
    , someLongVariablename2
    , someLongVariablename3
    , someLongVariablename4;

 if( (
     'dcr' === cmd
      && (action)
      && ('get' === actionHttp || 'post' === actionHttp )
      && whatever
   ) { ... }
Run Code Online (Sandbox Code Playgroud)

因此我的问题
是:"使用严格"是否"坏线断裂"已经过时了?

编辑:'使用严格'; 不会阻止执行坏线破坏代码.它可以防止执行某些错误.

我看到JSLint和JSHint以不同的方式处理坏的断行.JSHint对我喜欢的语法更友好.

因此,对于正在研究此问题的其他人而言,这可能是一种解决方案.

javascript jslint use-strict

7
推荐指数
1
解决办法
505
查看次数

为什么一个分离的,未经过重新编址的node.js子进程会保持其父级套接字打开?

  • 这个问题是关于node.js的底层O/S处理,并影响Mac和Linux.
  • 它处理node.js 0.10.39,但是文档从4.0.0不变(可能也适用于那里)

node.js手册说:

如果设置了分离选项,则子进程将成为新进程组的领导者.这使得孩子可以在父母退出后继续跑步.

默认情况下,父级将等待已分离的子级退出.要防止父级等待给定的子级,请使用child.unref()方法,并且父级的事件循环不会将子级包含在其引用计数中.

当你将node.js子进程作为分离和未进行的启动时,使用单独的stdio如下:

var child = spawn('prg', [], { // child spawn options
  detached: true,
  stdio: [
    'ignore', // stdin
    fs.openSync( updateOutputFile, "w" ), 
    fs.openSync( updateErrorFile, "w" ) 
  ]
}
child.unref();
Run Code Online (Sandbox Code Playgroud)

然后杀死父节点,lsof显示父节点正在侦听的TCP/IP(网络)套接字仍然打开并正在侦听.他们在孩子被杀后立即关闭.

为什么会这样?

5
推荐指数
0
解决办法
1446
查看次数