NodeJS子进程简介 NodeJS子进程提供了与系统交互的重要接口,其主要API有:
标准输入、标准输出及标准错误输出的接口。

 做项目的时候遇到了这样一个问题,如果用普通的ASP.NET
FileUpload控件实现文件上传,那么页面会刷新,那么页面上用JS拼出的元素就会消失,为了上传文件,又不能刷新页面,ajaxfileupload插件是一个很好的选择(插件下载地址:)

一、window.open()支持环境:

NodeJS子进程简介

ajaxfileupload是jQuery的一个插件,使用这个插件同时要引用jQuery.js文件

JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+

NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有:

直接上代码吧

二、windown.open基本语法:

标准输入、标准输出及标准错误输出的接口
child.stdin 获取标准输入
child.stdout 获取标准输出
child.stderr 获取标准错误输出
获取子进程的PID:child.pid
提供生成子进程的重要方法:child_process.spawn(cmd, args=[],
[options])
提供直接执行系统命令的重要方法:child_process.exec(cmd, [options],
callback)
提供杀死进程的方法:child.kill(signal=’SIGTERM’)

JS代码

window.open(pageURL,name,parameters)

实例一:利用子进程获取系统内存使用情况
将以下代码保存为 free.js:

[javascript]

其中:

复制代码 代码如下:

复制代码 代码如下:

pageURL为子窗口路径
name为子窗口句柄
parameters为窗口参数(各参数用逗号分隔)

var spawn = require(‘child_process’).spawn,
free = spawn(‘free’, [‘-m’]);

//执行AJAX上传文件 
$.ajaxFileUpload({
url: ‘/Web/Teacher/ImportAchievements.ashx’,
secureuri: false,
fileElementId: ‘fulAchievements’,
dataType: ‘json’,
success: function (data, status) {
    alert(data[0]);
}
});

三、windown.open示例:

// 捕获标准输出并将其打印到控制台
free.stdout.on(‘data’, function (data) {
console.log(‘标准输出:\n’ + data);
});

 //执行AJAX上传文件
 $.ajaxFileUpload({
 url: ‘/Web/Teacher/ImportAchievements.ashx’,
 secureuri: false,
 fileElementId: ‘fulAchievements’,
 dataType: ‘json’,
 success: function (data, status) {
  alert(data[0]);
 }
 });

复制代码 代码如下:

// 捕获标准错误输出并将其打印到控制台
free.stderr.on(‘data’, function (data) {
console.log(‘标准错误输出:\n’ + data);
});

说明:

<SCRIPT>
<!–
window.open(‘page.html’,’newwindow’,’height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no’)
//写成一行
–>
</SCRIPT>

// 注册子进程关闭事件
free.on(‘exit’, function (code, signal) {
console.log(‘子进程已退出,代码:’ + code);
});

1.这个方法很像大家熟知的$.ajax方法

脚本运行后,page.html将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。请对照。

执行代码后的结果:

2.参数说明

  上例中涉及的为常用的几个参数,除此以外还有很多其他参数,请见四。四、各项参数

$ node free.js
标准输出:
total used free shared buffers cached
Mem: 3949 1974 1974 0 135 959
-/+ buffers/cache: 879 3070
Swap: 3905 0 3905

url:AJAX的后台代码文件,要接收前台传来的文件数据

  其中yes/no也可使用1/0;pixelvalue为具体的数值,单位象素。

子进程已退出,代码:0
以上输出相当与在命令行执行:free -m 命令。

secureuri:是否对上传的文件加密

参数|取值范围|说明

通过这个简单的例子我们已经对子进程的使用有所了解,下面再来一个示例,用于演示exec
的使用方法。

fileElementId:HTML中<input
type=”file”/>上传控件的Id值,这里需要注意的是,后台代码是通过name-value的形式接收数据的,所以后台代码是通过name来接收数据的,而不是Id(根本原因是,这个方法会自动生成一个表单,将表单提交给后台代码处理)。

alwaysLowered|yes/no|指定窗口隐藏在所有窗口之后
alwaysRaised|yes/no|指定窗口悬浮在所有窗口之上
depended|yes/no|是否和父窗口同时关闭
directories|yes/no|Nav2和3的目录栏是否可见
height|pixelvalue|窗口高度
hotkeys|yes/no|在没菜单栏的窗口中设安全退出热键
innerHeight|pixelvalue|窗口中文档的像素高度
innerWidth|pixelvalue|窗口中文档的像素宽度
location|yes/no|位置栏是否可见
menubar|yes/no|菜单栏是否可见
outerHeight|pixelvalue|设定窗口(包括装饰边框)的像素高度
outerWidth|pixelvalue|设定窗口(包括装饰边框)的像素宽度
resizable|yes/no|窗口大小是否可调整
screenX|pixelvalue|窗口距屏幕左边界的像素长度
screenY|pixelvalue|窗口距屏幕上边界的像素长度
scrollbars|yes/no|窗口是否可有滚动栏
titlebar|yes/no|窗口题目栏是否可见
toolbar|yes/no|窗口工具栏是否可见
Width|pixelvalue|窗口的像素宽度
z-look|yes/no|窗口被激活后是否浮在其它窗口之上

实例二:利用子进程统计系统登录次数
将下面代码保存为 last.js

dataType:数据类型,一般是‘json’

【1、最基本的弹出窗口代码】

复制代码 代码如下:

success:上传成功后执行的回调函数

其实代码非常简单:

var exec = require(‘child_process’).exec,
last = exec(‘last | wc -l’);

ASP.NET一般处理程序中的代码

复制代码 代码如下:

last.stdout.on(‘data’, function (data) {
console.log(‘标准输出:’ + data);
});

[csharp]

<SCRIP TLANGUAGE=”javascript”>
<!–
window.open(‘page.html’)
–>
</SCRIPT>

last.on(‘exit’, function (code) {
console.log(‘子进程已关闭,代码:’ + code);
});

复制代码 代码如下:

因为着是一段javascripts代码,所以它们应该放在<SCRIP
TLANGUAGE=”javascript”>标签和</script>之间。<!–和–>是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作为文本显示出来。要养成这个好习惯啊。

发表评论

电子邮件地址不会被公开。 必填项已用*标注