我有一个nodejs父进程启动另一个nodejs子进程.子进程执行一些逻辑,然后将输出返回给父进程.输出很大,我正在尝试使用管道进行通信,如child.send()方法的文档(其工作正常BTW)所示.
我希望有人建议如何正确构建这个沟通渠道.我希望能够将数据从父节点发送到子节点,并且还能够将数据从子节点发送到父节点.我已经开始了一点,但它是不完整的(仅从父节点向子节点发送消息)并抛出错误.
父文件代码:
var child_process = require('child_process');
var opts = {
stdio: [process.stdin, process.stdout, process.stderr, 'pipe']
};
var child = child_process.spawn('node', ['./b.js'], opts);
require('streamifier').createReadStream('test 2').pipe(child.stdio[3]);
Run Code Online (Sandbox Code Playgroud)
子文件代码:
var fs = require('fs');
// read from it
var readable = fs.createReadStream(null, {fd: 3});
var chunks = [];
readable.on('data', function(chunk) {
chunks.push(chunk);
});
readable.on('end', function() {
console.log(chunks.join().toString());
})
Run Code Online (Sandbox Code Playgroud)
上面的代码打印预期输出("测试2")以及以下错误:
events.js:85
throw er; // Unhandled 'error' event
^
Error: shutdown ENOTCONN
at exports._errnoException (util.js:746:11)
at Socket.onSocketFinish (net.js:232:26)
at Socket.emit (events.js:129:20)
at finishMaybe (_stream_writable.js:484:14)
at afterWrite …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用socket.io通过ssl连接设置服务器到服务器链接.这是我的例子:
/**
* Server
*/
var app = require('express')();
var config = require('./config');
var https = require('https');
var http = require('http');
var fs = require('fs');
var server = https.createServer({key: fs.readFileSync(config.ssl.key), cert: fs.readFileSync(config.ssl.cert), passphrase: config.ssl.passphrase}, app);
//var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(config.port);
app.get('/', function (req, res) {
res.send('Server');
//res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
/**
* Client
*/
var io = require('socket.io-client'); …Run Code Online (Sandbox Code Playgroud) 我在处理字符编码方面遇到了困难.我正在尝试抓取以下网址:
http://www.google.com/movies?near=Montreal&date=0
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
var http = require('http');
var url = require('url');
var Iconv = require('iconv').Iconv;
var location = 'montreal';
var googleMovies = url.parse("http://www.google.com/movies?near=" + location);
var req = http.request(googleMovies, function(response) {
var str = '';
response.on('data', function(chunk) {
str += chunk;
});
response.on('end', function() {
var iconv = new Iconv('latin1', 'UTF-8');
str = iconv.convert(str).toString();
console.log(str);
});
});
req.end()
Run Code Online (Sandbox Code Playgroud)
我第一次尝试没有:
var iconv = new Iconv('latin1', 'UTF-8');
str = iconv.convert(str).toString();
Run Code Online (Sandbox Code Playgroud)
但这导致了 角色.
我在本页测试了上面列出的来源:
http://nlp.fi.muni.cz/projects/chared/
它似乎将它视为latin1,但事情可能是错误的.
最近我的gnome-terminal停止了工作.使用xterm启动后,我看到以下内容:
(process:3975): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: GDBus.Error:org.freedesktop.DBus.Error.Spawn.ChildExited: Process org.gnome.Terminal exited with status 8
Run Code Online (Sandbox Code Playgroud)
它似乎与我的语言环境有关,如下所示:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_GB.utf8
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8" …Run Code Online (Sandbox Code Playgroud) 我正在运行一个带有 mongo 连接池的守护进程。它运行了好几天,但最终崩溃了,并且每个后续请求都会收到此错误:
MongoError:服务器实例池被破坏
代码类似于:
var MongoClient = require('mongodb').MongoClient;
var express = require('express');
var app = express();
MongoClient.connect(config.mongo.url, function(err, db) {
app.use('/', function(req, res, next) {
db.collection('somecollection').find({}).toArray(function(err, result) {
console.log(result);
});
})
var server = require('http').Server(app);
server.listen(config.worker.port, function() {
var address = server.address();
logger.info({
address: address.address,
port: address.port
}, 'New Worker created');
});
});
Run Code Online (Sandbox Code Playgroud)
重新启动进程可以解决问题,但我希望应用程序能够以某种方式优雅地重新连接并重置那里的“db”对象。
我正在尝试使用缓存node-http-proxy模块设置 node-http-proxy模块.我已经设法配置node-http-proxy来完成我在代理调用方面需要做的事情,但我想找到一种方法来缓存其中一些调用.
我当前的代码如下(省略一些配置bootstrapping):
var http = require('http');
var https = require('https');
var httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
var fs = require('fs');
var handler = function(req, res) {
proxy.web(req, res, {target: 'http://localhost:9000'});
};
var server = http.createServer(handler).listen(config.children.http.port, function() {
console.log('Listening on port %d', server.address().port);
});
var secure = https.createServer(config.children.https.options, handler).listen(config.children.https.port, function() {
console.log('Listening on port %d', secure.address().port);
});
Run Code Online (Sandbox Code Playgroud)
在处理程序函数内部,我希望能够以某种方式捕获代理从"目标"读取的内容并将其流式传输到fs.createWriteStream('/ somepath'),然后再将其传递给res.然后我会修改我的函数来查看沿线的内容:
var handler = function(req, res) {
var path = '/somepath';
fs.exists(path, function(exists) {
if(exists) {
console.log('is …Run Code Online (Sandbox Code Playgroud) 我正在关注本教程: golang tutorial - wiki,除了“其他任务”部分的最后一点外,我已经设法使所有内容正常工作。我的教程实现:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"html/template"
"regexp"
)
type Page struct {
Title string
Body []byte
}
func (p *Page) save() error {
filename := "data/" + p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600)
}
func loadPage(title string) (*Page, error) {
filename := "data/" + title + ".txt"
body, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
return &Page{Title: title, Body: body}, nil
}
func renderTemplate(w http.ResponseWriter, tmpl …Run Code Online (Sandbox Code Playgroud)