小编Bra*_*ith的帖子

如何在jade中渲染json对象并循环遍历结果

当我将一个JSON字符串发送到jade文件进行rending时,我只能打印出整个字符串,而不是它的元素.如何打印特定元素或循环访问JSON字符串?

app.js:

var http    = require('http'), 
    express = require('express'),
    net     = require('net');

var app = express();

app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.logger('dev'));
app.use(express.static(__dirname + '/public'));

app.get('/', function (req, res) {
    var json_string = {"action":"date +%s","result":"1367263074"};
    res.render('index', { layout : 'layout', json: JSON.stringify(json_string) });
})
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

layout.jade:

!!!5
html
 head
  body
   p !{json}
   p !{json.result}
   p ---
    each val, key in json
     p #{key}: #{val}
Run Code Online (Sandbox Code Playgroud)

预期产量:

{"action":"date +%s","result":"1367263074"}
1367263074
---
action: date +%s
result: 1367263074
Run Code Online (Sandbox Code Playgroud)

实际产量:

{"action":"date +%s","result":"1367263074"}

--- …
Run Code Online (Sandbox Code Playgroud)

javascript json node.js express pug

14
推荐指数
2
解决办法
5万
查看次数

了解网络音频中的getByteTimeDomainData和getByteFrequencyData

无论我在哪里,这两种方法的文档都非常通用.我想知道我正在查看我从每个方法得到的返回数组到底是什么.

对于getByteTimeDomainData,每次传递覆盖的时间段是多少?我相信大多数的oscopes每次传球覆盖32毫秒.这也包括在内吗?对于实际的元素值本身,范围似乎是0 - 255.这相当于-1 - +1伏?

对于getByteFrequencyData,所覆盖的频率基于采样率,因此每个索引都是实际频率,但实际元素值本身又如何呢?是否有一个dB范围等于返回数组中返回的值?

html5 audio-streaming html5-audio web-audio-api

13
推荐指数
3
解决办法
3845
查看次数

通过Web Audio API与分块音频进行混乱/听不清的播放

我在上一篇文章中提到了这一点,但由于它是原始问题的主题,我将单独发布.我无法通过Web Audio播放传输的音频,就像在媒体播放器中播放一样.我尝试了两种不同的传输协议,binaryjs和socketio,在尝试播放Web Audio时都没有区别.为了排除音频数据的传输问题,我创建了一个示例,它在从客户端收到数据并将返回转储到stdout后将数据发送回服务器.将其导入VLC会产生您期望听到的聆听体验.

要通过vlc播放时听到结果,听起来应该如此,使用以下命令在https://github.com/grkblood13/web-audio-stream/tree/master/vlc上运行示例:

$ node webaudio_vlc_svr.js | vlc -

无论出于何种原因,当我尝试通过Web Audio播放相同的音频数据时,它失败了.结果是随机噪声,两者之间存在较大的静音间隙.

以下代码使播放声音如此糟糕有什么问题?

window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
var delayTime = 0;
var init = 0;
var audioStack = [];

client.on('stream', function(stream, meta){
    stream.on('data', function(data) {
        context.decodeAudioData(data, function(buffer) {
            audioStack.push(buffer);
            if (audioStack.length > 10 && init == 0) { init++; playBuffer(); }
        }, function(err) {
            console.log("err(decodeAudioData): "+err);
        });
    });
});

function playBuffer() {
    var buffer = audioStack.shift();
    setTimeout( function() {
            var …
Run Code Online (Sandbox Code Playgroud)

html5 audio-streaming node.js web-audio-api

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

以gzip格式从node.js服务器向客户端发送socket.io响应数据

我遇到的问题是我不知道如何能够判断我发送回客户端的数据是否以gzip格式压缩.从我看到的命令行查看服务器的输出:

debug - websocket writing 3:::{"result":1368673052397}
debug - websocket writing 3:::{"result":1368673053399}
...
Run Code Online (Sandbox Code Playgroud)

对我来说,这似乎是服务器以ascii形式编写响应,而不是在发送之前先将其压缩.

下面是我为编写这些结果而编写的示例.根据我的阅读,只要我设置'浏览器客户端gzip',我的响应应该被发送gzip.如果他们不是我怎么做的话,如果我是如何从服务器的调试信息中知道它们实际上是压缩响应.

当我启动服务器时,我在BASH中使用以下命令:

$ NODE_ENV =生产节点app.js

var express = require('express'),
    http    = require('http');

var app     = express(),
    server  = http.createServer(app),
    io      = require('socket.io').listen(server);

io.configure('production', function() {
    io.enable('browser client minification');
    io.enable('browser client etag');
    io.enable('browser client gzip');
    io.set('log level', 3);
});

app.use(express.logger('dev'));

app.get('/', function(req, res) {
    res.send(
    "<script src='/socket.io/socket.io.js'></script>\n"+
    "<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script>\n"+
    "<script>\n"+
    "var socket=io.connect('http://127.0.0.1:3000');\n"+
    "socket.on('message', function(data) {\n"+
    "   $(\"h2\").text(data);\n"+
    "});\n"+
    "</script>\n"+
    "<h1>"+process.env.NODE_ENV+"</h1>\n"+
    "<h2></h2>\n"
    );
});

server.listen('3000');

io.sockets.on('connection', function(webSocket) {
    function …
Run Code Online (Sandbox Code Playgroud)

javascript node.js express socket.io

7
推荐指数
2
解决办法
8836
查看次数

网络音频在Chrome中播放但不在Firefox中播放

Firefox似乎正在处理音频,但它不会播放.这个确切的代码适用于Chrome.我没有看到控制台出错,所以我真的很茫然.我认为它与audioBuffer.getChannelData(0).set(audio)有关; 但我不确定.任何人都知道为什么这个音频不会在FF中播放,但会在Chrome中播放?我现在正在运行FF 27.

window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
var init = 0;
var nextTime = 0;
var audioStack = [];

function toArrayBuffer(buffer) {
    var ab = new ArrayBuffer(buffer.length);
    var view = new Uint8Array(ab);
    for (var i = 0; i < buffer.length; ++i) {
    view[i] = buffer[i];
    }
    return ab;
}

socket.on('stream', function(data) {
    audioStack.push(data);
    //if ((init!=0) || (audioStack.length > 10)) { // make sure we put at least 10 chunks in the buffer before starting …
Run Code Online (Sandbox Code Playgroud)

audio firefox html5 web-audio-api

4
推荐指数
1
解决办法
1817
查看次数

从内联Expect命令返回退出状态代码

在执行expect -c时,如何使Expect返回退出状态代码而不是0或1.

例如,在执行以下行之后,我希望返回"17",但是我得到"0"表示命令成功运行.

expect -c "spawn echo \"foo\"; expect { -re \"foo\" { exit 17 } }"; echo $?
Run Code Online (Sandbox Code Playgroud)

bash tcl expect

3
推荐指数
1
解决办法
1248
查看次数

node:将缓冲区转换为十进制值

我有一个填充数据的缓冲区,以<Buffer 52 49 ...>开头

假设此缓冲区定义为buf,如果我运行buf.readInt16LE(0),则返回以下内容:

18770

现在,十六进制值52和49的二进制表示是:

01010010 01001001

如果我将前15位转换为十进制,省略第二位的二进制补码,我会得到以下结果:

21065

为什么我的结果没有给我18770的值?

math node.js

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