【发布时间】:2016-01-16 16:46:44
【问题描述】:
我正在开发一个 node.js 应用程序,我想知道这是否可行,如果可以,如何:启动服务器后,node.js 应该在服务器端打开一个新窗口并显示从代码生成的图像。
【问题讨论】:
-
通过正确的软件组合,几乎一切皆有可能
-
@eko 查看打开的模块。
标签: javascript node.js web server
我正在开发一个 node.js 应用程序,我想知道这是否可行,如果可以,如何:启动服务器后,node.js 应该在服务器端打开一个新窗口并显示从代码生成的图像。
【问题讨论】:
标签: javascript node.js web server
在服务器端打开任何窗口都不是好方法,因为服务器将被各种用户访问。
但是如果你想这样做,你可以使用 nodejs 的child_process 模块并执行带有扩展名的图像。
例子
var exec = require('child_process').exec,
child;
child = exec('<image with location & extension>',
function (error, stdout, stderr) {
console.log('Image opened');
if (error !== null) {
console.log('exec error: ' + error);
}
});
使用 express 的 Hello world 示例。
var express = require('express');
var app = express();
app.get('/', function (req, res) {
var exec = require('child_process').exec,
child;
child = exec('a.jpg',
function (error, stdout, stderr) {
console.log('Image opened');
if (error !== null) {
console.log('exec error: ' + error);
}
});
res.send('Hello World!');
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
【讨论】:
您可以使用open在浏览器中打开,带有图片网址。
var open = require('open');
open('http://127.0.0.1/yourimage.png');
或者也许使用Node-Webkit 而不是nodejs。
完整代码:
var fs = require('fs'),
http = require('http'),
url = require('url'),
open = require('open');
http.createServer(function(req, res) {
var request = url.parse(req.url, true);
var action = request.pathname;
if (action == '/yourimage.png') {
var img = fs.readFileSync('./yourimage.png');
res.writeHead(200, {
'Content-Type': 'image/png'
});
res.end(img, 'binary');
}
}).listen(8080, '127.0.0.1');
open('http://127.0.0.1/yourimage.png');
链接:
如果你使用 node-webkit,你可以创建一个窗口(使用 html/css)。
【讨论】:
根据我的经验,从服务器端(在大多数情况下甚至从您的代码)打开一个新窗口是不可能的。我要做的是使用一些javascript代码使页面上的内容动态化(例如,查看angularjs)并在同一页面上显示图像,即使图像稍后在服务器端生成。 另一种选择是从该图像的客户端代码打开一个新选项卡。
【讨论】: