node.js表单——formidable
 
node处理表单请求,需要用到formidable包。安装formidable包的命令如下:

npm install formidable

安装package的路径分为两种,一种是本地目录,一种是全局目录。

npm install xxx -g 命令将模块下载安装到全局目录中。

全局目录可以通过 npm config set prefix "目录路径" 来设置。

通过 npm config get prefix 来获取当前设置的目录。

npm install xxx ,则是将模块下载到当前命令行所在目录。

关于package安装路径的说明网上是像上面那样说的,但我不执行全局安装的时候,formidable被安装在了用户主目录/home/用户名/node_modules下面,而不是安装在命令行所在目录,我用的ubuntu版本是14.04,原因不太清楚。安装在本里目录和全局目录到底哪个好,我认为各有优势。这里就不赘述了。

安装完formidable之后,一个标准的node project,应该有一个index.js文件,用于定义怎么处理来自浏览器的request,index.js代码如下:

var http = require("http");//获取http对象
var url = require("url");//获取url对象
//http、url都是系统自带的模块,而下面的requestHandlers是我们手动编写的模块,对应当前目录下的requestHandlers.js文件
var requestHandlers = require("./requestHandlers"); //onRequest函数,用于处理http请求,不同的url请求交由不同的函数进行处理
function onRequest(request, response){
var pathname = url.parse(request.url).pathname;//获取请求的URL //requestHandlers的handle属性又是一个对象,该对象包含多组属性:属性值,属性名对应uri,属性值对应处理函数,详见requestHandlers.js
if(typeof requestHandlers.handle[pathname] === "function")
requestHandlers.handle[pathname](request, response);
else {
console.log("No request handler found for " + pathname);
response.writeHead(404, {"Content-Type": "text/html;charset=utf-8"});
response.write("您访问的页面不存在!访问<a href='/'>首页</a>");
response.end();
}
} var server = http.createServer(onRequest);//函数onRequest作为createServer的参数,这样浏览器每发送一次请求,服务器中该函数都会被调用一次
server.listen(8888);
//上面两句可以合写成http.createServer(onRequest).listen(8888);

上面这段代码几乎可以成为大部分node项目的index的模板,有改动也不会很大,如果给应用增加功能,只需要更改后面的requestHandlers.js文件。以前上学时老师讲的一个基本node应用分为index.js、server.js、router.js和requestHandlers.js四个部分,而server.js和router.js的代码从来都是不需要改变的,可以应用到任何一个项目,后来我发现其实前三个部分可以整合到一起,于是自己琢磨了一下写出了上面那个index.js,后来发现整合之后其实还好理解一点。

下面贴出requestHandlers.js的代码:

var handle = {};
var formidable = require("formidable"); handle["/"] = start;
handle["/start"] = start;
handle["/upload"] = upload; function start(request, response) {
var body = '<html>'+
'<head>'+
'<meta http-equiv="Content-Type" content="text/html; '+
'charset=UTF-8" />'+
'</head>'+
'<body>'+
'<form action="/upload" method="post">'+
'学号:<input type="text" name="id" /><br /><br />'+
'姓名:<input type="text" name="name" /><br /><br />'+
'<input type="submit" value="提交" />'+
'</form>'+
'</body>'+
'</html>';
response.writeHead(200, {"Content-Type": "text/html"});
response.write(body);
response.end();
} function upload(request, response) {
var form = new formidable.IncomingForm();
form.parse(request, function(error, fields, files) {
console.log("id:" + fields.id);
console.log("name:" + fields.name);
response.writeHead(200, {"Content-Type": "text/html;charset=utf-8"});
response.write("id:" + fields.id + "<br>");
response.write("name:" + fields.name);
response.end();
});
} exports.handle = handle;
exports.start = start;
exports.upload = upload;

上面演示了一个form表单提交后,从form表单中提取信息的例子。其中handle是一个对象,包含多组属性和属性值,属性名对应url,属性值对应处理函数,即请求的url与函数是一一对应的,浏览器每发送一个请求,服务器分析出请求的url,并用handle中名为该url的属性的值所对应的函数来处理该请求。比如,浏览器发送了一个请求,uri为/upload,服务器查找到handler中,handler["/upload"] = upload,就会调用upload函数来处理该请求。模块中所有可能会被外部文件调用属性、函数都需要使用exports命令导出,如requestHandlers.js的结尾部分。所以,如果增加功能时,页面上增加了一个链接或表单之类的请求/xxx,则通常需要在requestHandlers.js文件中作出修改,分三步:

一、增加 handler["/xxx"] = xxx;

二、增加 function xxx(request, response){...};

三、增加 exports.xxx = xxx;

 

node.js表单——formidable/////z的更多相关文章

  1. node.js表单——formidable

    node处理表单请求,需要用到formidable包.安装formidable包的命令如下: npm install formidable 安装package的路径分为两种,一种是本地目录,一种是全局 ...

  2. 一个漂亮的js表单验证页面+验证码

    一个漂亮的js表单验证页面 见图知其意, 主要特性 带密码安全系数的判断 其他的就没有啥啦 嘿嘿嘿 当然,其代码也在Github上 我也准备了一套可以直接Ctrl + v; Ctrl + c 运行的代 ...

  3. JS表单验证-12个常用的JS表单验证

    JS表单验证-12个常用的JS表单验证 最近有个项目用到了表单验证,小编在项目完结后的这段时间把常用的JS表单验证demo整理了一下,和大家一起分享~~~ 1. 长度限制 <p>1. 长度 ...

  4. js 表单验证控制代码大全

    js表单验证控制代码大全 关键字:js验证表单大全,用JS控制表单提交 ,javascript提交表单:目录:1:js 字符串长度限制.判断字符长度 .js限制输入.限制不能输入.textarea 长 ...

  5. js表单提交,面向对象

    一.js表单验证之后再提交 1.普通按钮onclick函数调用表单的submit()函数 <input type=button name="submit1" value=&q ...

  6. jquery.validation.js 表单验证

    jquery.validation.js 表单验证   官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuer ...

  7. Jquery.validate.js表单验证插件的使用

    作为一个网站web开发人员,以前居然不知道还有表单验证这样好呀的插件,还在一行行写表单验证,真是后悔没能早点知道他们的存在. 最近公司不忙,自己学习一些东西的时候,发现了validation的一个实例 ...

  8. angular js 表单验证

    <!doctype html> <html ng-app="myapp"> <head> <meta charset="UTF- ...

  9. JS表单验证类HTML代码实例

    以前用的比较多的一个JS表单验证类,对于个人来说已经够用了,有兴趣的可以在此基础上扩展成ajax版本.本表单验证类囊括了密码验证.英文4~10个 字符验证. 中文非空验证.大于10小于100的数字.浮 ...

随机推荐

  1. iOS ReactiveCocoa简单使用笔记

    涉及对象: 两个输入框,一个按钮. 代码功能: 随时监测输入框内容的长度变化,并在输入内容不符合预设要求时,立即改变输入框背景色. 在两个输入框的内容都符合预设要求时,按钮才可用. RACSignal ...

  2. css3 缓动公式

    var easingMap = { "linear": [0.250, 0.250, 0.750, 0.750], "ease": [0.250, 0.100, ...

  3. 【BZOJ2157】旅游 LCT

    模板T,SB的DMoon..其实样例也是中国好样例...一开始不会复制,yangyang:找到“sample input”按住shift,按page down.... #include <ios ...

  4. Html简单介绍

    一.Html 1.万维网的核心语言,高大上称之为超文本标记语言(Html)的第五次修改 2.完成的时间:2014年10月29日 3.我们需要了解有一定高度的知识: WHATWG  WEB超文本应用技术 ...

  5. 【iCore3应用开发平台】发布 iCore3 应用开发平台使用说明

    PDF下载地址:http://pan.baidu.com/s/1c2ca2lU

  6. 前端开发与SEO

    前端开发中通过一些小习惯,可以有利于SEO,本着蚊子再小也是肉的原则,能抓住自然不能忽略. 1.控制首页链接数量,不能过多,也不要太少.更不要为了凑数而添加 2.扁平化层次,力争跳转三次可以到任何页面 ...

  7. 关于BeanUiles.copyPropertis()的用法

    最近的项目遇到BeanUiles.copyPropertis(),大大的简化了代码量.用hibernate从数据库中映射的实体类,与pojo对象进行转换,传统做法 Object obj = baseD ...

  8. MySQL触发器使用详解

    MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器在MySQL中,创建触发器语法如下: ...

  9. SSH登录远程主机执行脚本找不到环境变量

    这是因为在Linux上,bash会有四种模式,根据不同的case,Linux会加载不同模式的bash.一般如果你自己直接登录主机,能看到环境变量,但是使用ssh 远程登录执行脚本就找不到环境变量,那么 ...

  10. How to create a "BOOT USB DISK" for EXSI6.0

    1 准备工作 opensuse 13.2ESXi ISO文件  //vmware 官网下载 VMware-VMvisor-Installer-5.1.0-799733.x86_64.iso,XXXXX ...