小编Dra*_*SAN的帖子

在node.js中生成并终止进程

我可能会因此而被投票,但我不明白我哪里出错了.

我试图在javascript中生成一个进程,并在一段时间后将其杀死(用于测试).

最后,进程将是一个无限循环,我需要在指定的时间使用不同的参数重新启动,所以我认为产生进程并终止它是最好的方法.

我的测试代码是:

var spawn=require('child_process').spawn
, child=null;

child=spawn('omxplayer', ['test.mp4'], function(){console.log('end');}, {timeout:6000});
console.log('Timeout');
setTimeout(function(){
    console.log('kill');
    child.kill();
}, 1200);

child.stdout.on('data', function(data){
    console.log('stdout:'+data);
});

child.stderr.on('data', function(data){
    console.log('stderr:'+data);
});

child.stdin.on('data', function(data){
    console.log('stdin:'+data);
});
Run Code Online (Sandbox Code Playgroud)

结果是:

#~$ node test.js
Timeout
kill
Run Code Online (Sandbox Code Playgroud)

但是我仍然需要发送ctrl + C来结束程序

我错过了什么?

编辑:在Raspbian,节点0.10.17,omxplayer是二进制(视频播放器).

尝试:添加chmod + x到应用程序.以root身份发布.暂停了子进程的标准输入.在kill命令中使用所有与终止相关的信号.

EDIT2:

在应用程序运行时启动ps命令:

2145    bash
2174    node
2175    omxplayer
2176    omxplayer.bin
2177    ps
Run Code Online (Sandbox Code Playgroud)

因此omxplayer do是一个包装器,它在结束时不会结束进程,有没有办法获得包装进程的pid?

EDIT3:

仍然咬着灰尘,试过这个:

spawn('kill', ['-QUIT', '-$(ps opgid= '+child.pid+')']);
Run Code Online (Sandbox Code Playgroud)

我认为会杀死omxplayer的所有孩子,我不知道是否使用了这样的spawn是错的,或者它是否是不起作用的代码.

最后编辑:

我做的最后一次编辑是很好的答案,但不得不被欺骗了一下.

我创建了一个sh文件(执行权限),如下所示:

PID=$1
PGID=$(ps opgid= "$PID")
kill -QUIT -"$PGID"
Run Code Online (Sandbox Code Playgroud)

我从这开始:

execF('kill.sh', [child.pid], function(){ …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

51
推荐指数
4
解决办法
5万
查看次数

xml2js:输出怎么样?

我试图使用node.js模块xml2js

我的代码很简单:

function testparse(pathname, callback) {
    var parser = require('xml2js').Parser(),
        util = require('util'),
        fs = require('fs'),
    fs.readFile(pathname, function (err, data) {
        parser.parseString(data, function(err, result) {
            console.log('Complete result:');
            console.log(util.inspect(result, {depth: null})); //Work
            console.log('Try to access element:');
            console.log(result.smil.body); //Work
            console.log(result.smil.body.update); //Undefined
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

我的xml文件如下:

<?xml version="1.0"?>
<smil>
    <head/>
    <body>
        <update /*some field*//>
        <stream name="name"/>
        <playlist /*some field*/>
            <video /*some field*//>
            <video /*some field*//>
            <video /*some field*//>
        </playlist>
    </body>
</smil>
Run Code Online (Sandbox Code Playgroud)

输出给了我:

Complete result:
{ smil:
    { head: [''],
      body:
        [ { update: …
Run Code Online (Sandbox Code Playgroud)

xml node.js xml-parsing

22
推荐指数
4
解决办法
4万
查看次数

mongoose递归填充

我一直在寻找,我没有找到任何好的答案.我有一个n-deep树,我存储在DB中,我想填充所有父母,所以最后我得到完整的树

node
 -parent
  -parent
    .
    .
    -parent
Run Code Online (Sandbox Code Playgroud)

到目前为止,我填充到2级,正如我所提到的,我需要达到n级.

Node.find().populate('parent').exec(function (err, items) {
   if (!err) {
     Node.populate(items, {path: 'parent.parent'}, function (err, data) {
       return res.send(data);
     });
   } else {
     res.statusCode = code;
     return res.send(err.message);
   }
 });
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js

13
推荐指数
4
解决办法
9790
查看次数

javascript/node.js中的seek()等价物?

我目前正在尝试用node.js的fs模块读取一些文件.因为它缺少我曾经使用的函数(fseek(),getline()...),所以我创建了另一个模块来取回它们.(C stdio.h的node.js副本).

我的简单问题是:

seek()是否存在于其他名称中,或者我是否需要重新实现几乎每个函数才能拥有它?

javascript file-io node.js

12
推荐指数
1
解决办法
8516
查看次数

不使用phpExcel将大型xlsx文件转换为csv

我有一个大的xlsx文件正在90MB使用phpexcel它给我

Warning: simplexml_load_string(): Memory allocation failed : growing buffer
Run Code Online (Sandbox Code Playgroud)

我尝试使用此处记录的每个方法加载文件,并且还更改了php.ini memory_limit = -1.

我正在尝试将xlsx文件转换为csv文件,以便可以轻松加载.

有没有办法在不使用phpexcel的情况下将xlsx文件转换为csv?

php csv excel

9
推荐指数
1
解决办法
3328
查看次数

Node.js:在集群中具有不同代码的工作者?

我在node.js中有一个应用程序.

本申请分为3部分:

launcher.js,启动另外两个部分,并在处理清理后在崩溃/更新时重新启动它们.

app.js,自己在电脑上工作.

server.js,用于访问日志和不同的命令.

启动器的简化代码是:

var cluster = require('cluster'),
    exec = require('child_process').exec,
    server;

if (cluster.isMaster) {
    cluster.fork();
    server = exec('server.js');

    cluster.on('exit', function(worker, code, signal) {
        //Clean corrupted data, log crash if neccessary, reload source code for update ...
        cluster.fork();
    });
    server.on('exit', function () {
        //Same as for app, with a different handling of signal...
        server = exec('node server.js');
    });
} else {
    var self = require('app.js');
    self.start();
}
Run Code Online (Sandbox Code Playgroud)

集群的好处在于它们与启动程序处于同一个进程中,因此我可以处理一些错误,而无需重新启动应用程序(只需在应用程序内部调用正确的函数进行"软重启"),并保持一切都在同一个过程中.

虽然有了exec,我仍然坚持重新启动服务器,有时不知道出了什么问题,这意味着有一个子shell,我不喜欢.

有没有办法分叉群集,但启动不同的代码?

javascript node.js

9
推荐指数
2
解决办法
5357
查看次数

如何使用javascript或lodash从对象数组中删除不匹配的对象

我从服务器获取两个对象数组,如下所示:

var duplicateTestData = [
    { 
        licenseId: 'xxx',
        batchId: '123',
        reportDate: Fri Dec 11 2015 00:00:00 GMT+0530 (India Standard Time) 
    },
    { 
        licenseId: 'yyy',
        batchId: '124',
        reportDate: Fri Dec 11 2015 00:00:00 GMT+0530 (India Standard Time) 
    },
    { 
        licenseId: 'aaa',
        batchId: '145',
        reportDate: Fri Dec 11 2015 00:00:00 GMT+0530 (India Standard Time) 
    }
];

var finalResult = [
    { 
        reportDate: Fri Dec 11 2015 00:00:00 GMT+0530 (India Standard Time),
        license: {},
        testType: 'P1',
        productType: 'Flower',
        batchId: '123',
        licenseId: 'xxx',
        createType: …
Run Code Online (Sandbox Code Playgroud)

javascript node.js underscore.js lodash

9
推荐指数
3
解决办法
994
查看次数

mongoose Schema中"required"的含义是什么?

我正在编写一个mongoose模式,我想了解它的属性.

这是我的架构:

var UserSchema = new Schema({
        name: String,
        username: { type: String, required: true, index: { unique: true }},
        password: { type: String, required: true, select: false }
});
Run Code Online (Sandbox Code Playgroud)
  1. 为什么required没有宣布"名字" - ?
  2. 为何required宣布?
  3. 什么select- 真/假 - 意味着什么?
  4. index- 应该宣布为什么?

mongoose mongodb node.js

8
推荐指数
1
解决办法
4954
查看次数

记录请求单独进行良好操作还是混乱?

我正在开发一个API,它会进行大量的调用,其中一些需要因各种原因进行彻底记录.

现在,我记录了函数中发生的所有输入/输出/处理,并且API完美运行,因此似乎不需要增加日志记录量.

但是我想到的一个想法就是为每个传入的API调用分配一个UUID,这将跟随内部函数的记录.

虽然它会在每个函数中创建相当多的附加参数来跟随UUID,但我想知道它是否是常见的做法,如果我应该在需要之前实现它,并且要做的更改量是可管理的.

例如:

显然,真正的代码要复杂得多,并且不console.log用于日志记录

const express = require('express'),
    fs = require('fs'),
    config = require('./config.json'),
    app = express();

function foo(bar, callback) {
    console.log(bar);
    fs.open(bar, (err, data) => {
        if(err) {
            console.err(err);
            callback(err);
        } else {
            console.log(data)
            callback(null, data);
        }
    });
}

app.get('/foo', (req, res) => {
    console.log(req.body);
    foo(req.body.bar, (err, result) => {
        if(err) {
            console.err(err);
            res.send(err);
        } else {
            console.log(result)
            res.send(null, result);
        }
    });
});

app.listen(config.port);
Run Code Online (Sandbox Code Playgroud)

至:

const express = require('express'),
    UUID = require('uuid-generator'),
    fs = require('fs'), …
Run Code Online (Sandbox Code Playgroud)

javascript logging node.js

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

引擎盖下使用的Firebase是什么?

我计划将BaaS用于项目,并且几乎确信使用Firebase.

我唯一想知道的是它作为数据库使用的是什么?

我知道它是一个noSQL数据库,在JSON中存储元素,关于quora的问题提到Firebase曾经使用MongoDB作为它的数据库,但现在不再存在了.

所以我的问题很简单:Firebase在底层使用什么来存储它的数据?

firebase firebase-realtime-database

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