第一页 上页 7 8 9 10 11 12 13 14 15 16 下页 最后页 [ 显示模式: 摘要 | 列表 ]

假设URL为:http://localhost:8888/select?name=a&id=5

JavaScript代码
  1. http.createServer(function(request,response){    
  2.         var pathname = url.parse(request.url).pathname;  //pathname => select    
  3.             
  4.         var arg = url.parse(request.url).query;          //arg => name=a&id=5    
  5.         console.log("Request for " + arg );    
  6.         var str = querystring.parse(arg);                //str=> {name:'a',id:'5'}    
  7.             
  8.         var arg1 = url.parse(request.url, true).query;   //arg1 => {name:'a',id:'5'}    
  9.         console.log("Request for " + arg1 );    
  10.             
  11.         var name = querystring.parse(arg).name;         //name => a    
  12.         console.log("name = "+name);    
  13.     
  14.         console.log("Request for " + pathname + " received.");    
  15.     }).listen(8888);    

//querystring.parse(arg)   => { name: 'a', id: '5' }

var url = require('url');
var a = url.parse('http://example.com:8080/one?a=index&t=article&m=default');
console.log(a);

//输出结果:
{
    protocol : 'http' ,
    auth : null ,
    host : 'example.com:8080' ,
    port : '8080' ,
    hostname : 'example.com' ,
    hash : null ,
    search : '?a=index&t=article&m=default',
    query : 'a=index&t=article&m=default',
    pathname : '/one',
    path : '/one?a=index&t=article&m=default',
    href : 'http://example.com:8080/one?a=index&t=article&m=default'
}

Tags: ,

json格式被越来越多的开发者说青睐,我们常常在接口定义时使用这种格式参数进行数据交换.

今天主要给大家从繁到简的几个node.js下使用的提交 json个数参数的方式方法.

下面示例中出现的参数都做了处理,拷贝代码后需要更改这些参数同时自己写一个接收json格式的api,请求成功后再返回json格式

(一) node.js 原生自带http模块,可以解决基于http协议下的请求及回发,执行效率高,但是好多东西需要开发人员自己动手来实现,看下面代码

JavaScript代码
  1. var http=require('http');  
  2.   
  3. var body = {  
  4.     "data":{  
  5.         "channel" : "aaa",  
  6.         "appkey" : "bbb"  
  7.     },  
  8.     "sign" : "22334455",  
  9.     "token" : "bb667788"  
  10. };  
  11.   
  12. var bodyString = JSON.stringify(body);  
  13.   
  14. var headers = {  
  15.   'Content-Type''application/json',  
  16.   'Content-Length': bodyString.length  
  17. };  
  18.   
  19.   
  20. var options = {  
  21.   host: '127.0.0.1',  
  22.   port: 3005,  
  23.   path: '/Config',  
  24.   method: 'POST',  
  25.   headers: headers  
  26. };  
  27.   
  28. var req=http.request(options,function(res){  
  29.     res.setEncoding('utf-8');  
  30.   
  31.     var responseString = '';  
  32.   
  33.     res.on('data'function(data) {  
  34.         responseString += data;  
  35.     });  
  36.   
  37.     res.on('end'function() {  
  38.     //这里接收的参数是字符串形式,需要格式化成json格式使用  
  39.         var resultObject = JSON.parse(responseString);  
  40.         console.log('-----resBody-----',resultObject);  
  41.     });  
  42.   
  43.     req.on('error'function(e) {  
  44.         // TODO: handle error.  
  45.         console.log('-----error-------',e);  
  46.     });  
  47. });  
  48. req.write(bodyString);  
  49. req.end();  

http模块比较原始,请求参数里我们要手动指定请求头类型,头长度,请求方式,主机头和端口等.

当我们将json格式参数post上去以后,得到的response 对象需要我们在 data 事件上手动处理获取到的数据, end 事件表示接收数据流已结束, error 事件是当回发数据发生错误时将自动触发此事件响应函数

(二)

大名鼎鼎的 request 模块上场了,这个模块帮我们做了很多我们不关心的东西,比如请求后得到的 response 对象,我们将不会非常繁琐的去手动捕获 data ,end ,error 事件. 取而代之的是回调函数里直接将我们关心的回发数据放到了一个变量里,看下面的代码:

此模块并发node.js 原生自带模块,首先需要 npm install request ,下面代码的参数同样做了处理

JavaScript代码
  1. var request=require('request');  
  2.   
  3. var options = {  
  4.     headers: {"Connection""close"},  
  5.     url: 'http://127.0.0.1:3005/Config',  
  6.     method: 'POST',  
  7.     json:true,  
  8.     body: {data:{channel : "aaa",appkey : "bbb"},sign : "ccc",token : "ddd"}  
  9. };  
  10.   
  11. function callback(error, response, data) {  
  12.     if (!error && response.statusCode == 200) {  
  13.         console.log('----info------',data);  
  14.     }  
  15. }  
  16.   
  17. request(options, callback);  

代码明显比第一种方式少了很多,callback 里面的 data 参数就是我们请求路径后得到的内容,而且我们在 options 中指定了 json:true ,所以请求和回发的数据自动转变成了 json 对象.我们看下这次的运行结果:

node request.js

下面还有一种更简单的方法和大家分享

(三)

也是一个第三方模块,叫做 request-json

看名字就非常容易理解,有关json 格式参数的请求模块,使用也非常方便.

首先 npm install request-json  安装此模块,定义好 json请求参数对象,见下面代码:

JavaScript代码
  1. request = require('request-json');  
  2. var client = request.newClient('http://127.0.0.1:3005/');  
  3.   
  4. var data = {data:{channel : "aaa",appkey : "bbb"},sign : "4444",token : "555"};  
  5. client.post('Config', data, function(err, res, body) {  
  6.   console.log(res.statusCode,body);  
  7. });  

返回的body 也是自动序列化成json对象,见运行结果

前面的 200 是 res.statusCode 回发状态值,接着输出的是我们得到的json对象,无论从使用还是理解上,都是最简单的一种方法.

nodeJs构建一个HttpServer

[不指定 2016/09/04 20:19 | by 刘新修 ]

将下面代码放入server.js中

JavaScript代码
  1. var http = require("http");    
  2. http.createServer(function(request, response) {    
  3.     console.log('request received');    
  4.     response.writeHead(200, {"Content-Type": "text/plain"});    
  5.     response.write("Hello World");    
  6.     response.end();    
  7. }).listen(8888);    
  8. console.log('server started');    

执行node server.js
打开http://localhost:8888/,页面显示Hello World

JavaScript代码
  1. var http=require('http');  
  2.   
  3. var data={key:'value', hello:'world'};  
  4. var srv=http.createServer(function (req, res) {  
  5.   res.writeHead(200,{'Content-Type': 'application/json'});  
  6.   res.end(JSON.stringify(data));  
  7. });  
  8.   
  9. srv.listen(8080,function() {  
  10.   console.log('listening on localhost:8080');  
  11. });  

 

Tags: ,

首先执行:npm install node-uuid -g

JavaScript代码
  1. var uuid = require('node-uuid');
  2. //var uuid = require('/usr/local/nodejs/lib/node_modules/node-uuid');
  3. console.log(uuid.v1())    
  4. console.log(uuid.v4())    

注明:如果在linux下编译安装node可以使用软连接ls 或这直接写绝对路径引入需要的nmp模块!

v1 是基于时间戳生成uuid

v4是随机生成uuid

结果:

 

  1. 57af5b10-3a76-11e5-922a-75f42afeee38  
  2. f3917fb9-9bde-4ec1-a7cf-966251b3d22a  
Tags: ,

你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块。例如:(假设这是rocker.js文件)

JavaScript代码
  1. exports.name = function() {  
  2.     console.log('My name is Lemmy Kilmister');  
  3. };  

在另一个文件中你这样引用

JavaScript代码
  1. var rocker = require('./rocker.js');  
  2. rocker.name(); // 'My name is Lemmy Kilmister'  

那到底Module.exports是什么呢?它是否合法呢?

其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。

修改rocker.js如下:

JavaScript代码
  1. module.exports = 'ROCK IT!';  
  2. exports.name = function() {  
  3.     console.log('My name is Lemmy Kilmister');  
  4. };  

再次引用执行rocker.js

JavaScript代码
  1. var rocker = require('./rocker.js');  
  2. rocker.name(); // TypeError: Object ROCK IT! has no method 'name'  

发现报错:对象“ROCK IT!”没有name方法

rocker模块忽略了exports收集的name方法,返回了一个字符串“ROCK IT!”。由此可知,你的模块并不一定非得返回“实例化对象”。你的模块可以是任何合法的javascript对象--boolean, number, date, JSON, string, function, array等等。

你的模块可以是任何你设置给它的东西。如果你没有显式的给Module.exports设置任何属性和方法,那么你的模块就是exports设置给Module.exports的属性。

下面例子中,你的模块是一个类:

JavaScript代码
  1. module.exports = function(name, age) {  
  2.     this.name = name;  
  3.     this.age = age;  
  4.     this.about = function() {  
  5.         console.log(this.name +' is 'this.age +' years old');  
  6.     };  
  7. };  

可以这样应用它:

JavaScript代码
  1. var Rocker = require('./rocker.js');  
  2. var r = new Rocker('Ozzy', 62);  
  3. r.about(); // Ozzy is 62 years old  

下面例子中,你的模块是一个数组:

JavaScript代码
  1. module.exports = ['Lemmy Kilmister''Ozzy Osbourne''Ronnie James Dio''Steven Tyler''Mick Jagger'];  

可以这样应用它:

JavaScript代码
  1. var rocker = require('./rocker.js');  
  2. console.log('Rockin in heaven: ' + rocker[2]); //Rockin in heaven: Ronnie James Dio  

现在你明白了,如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports。

给Module.exports添加属性类似于给exports添加属性。例如:

JavaScript代码
  1. module.exports.name = function() {  
  2.     console.log('My name is Lemmy Kilmister');  
  3. };  

同样,exports是这样的

JavaScript代码
  1. exports.name = function() {  
  2.     console.log('My name is Lemmy Kilmister');  
  3. };  

请注意,这两种结果并不想同。前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的“实例化对象”改变成一个类型。

yum -y install gcc gcc-c++

 
因centOS6.6/+ 最高版本的gcc也只到4.4.7版本,只好手动升级一下了。
 
.tar.gz    格式解压为          tar   -zxvf   xx.tar.gz
.tar.bz2   格式解压为          tar   -jxvf    xx.tar.bz2
 
下载gcc-4.8.2源码:
wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.8.2/gcc-4.8.2.tar.bz2
wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.9.1/gcc-4.9.1.tar.gz
tar jxvf gcc-4.8.2.tar.bz2
 
执行自动下载依赖(gmp-4.3.2、mpfr-2.4.2、mpc-0.8.1)
/home/installSoft/gcc-4.8.2/contrib/download_prerequisites
 
或者自己下载也行(根据gcc-4.8自动匹配好的版本收集比较兼容):
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
 
 
=====================================================================================
第一部分安装gcc的依赖库
=====================================================================================
 
gcc 编译需要三个额外库gmp、mpfr、mpc,下载并按照下面的顺序安装它们,如下:
wget ftp://ftp.gnu.org/gnu/gmp/gmp-5.1.3.tar.gz
wget ftp://ftp.gnu.org/gnu/mpfr/mpfr-3.1.2.tar.gz
wget http://www.multiprecision.org/mpc/download/mpc-1.0.tar.gz
 
 
tar -zxvf gmp-5.1.3.tar.gz
cd gmp-5.1.3
./configure --prefix=/usr/local/gmp-5.1.3
make && make install
cd ..
 
tar -zxvf mpfr-3.1.2.tar.gz
cd mpfr-3.1.2
./configure --prefix=/usr/local/mpfr-3.1.2 --with-gmp=/usr/local/gmp-5.1.3
make && make install
cd ..
 
tar -zxvf mpc-1.0.tar.gz
cd mpc-1.0
./configure --prefix=/usr/local/mpc-1.0 --with-gmp=/usr/local/gmp-5.1.3 --with-mpfr=/usr/local/mpfr-3.1.2
make && make install
cd ..
 
 
=====================================================================================
第二部分安装gcc
=====================================================================================
 
wget http://ftp.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz
cd gcc-build-5.3.0
../configure --prefix=/usr/local/gcc -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ --with-gmp=/usr/local/gmp-5.1.3 --with-mpfr=/usr/local/mpfr-3.1.2 --with-mpc=/usr/local/mpc-1.0
make
make install
 
执行以下看看装好没有:
/usr/local/gcc/bin/gcc -v
gcc version 4.8.2 (GCC)
 
 
卸载旧版本
yum remove -y gcc gcc-c++
updatedb
 
 
链接新版本
cd /usr/bin
ln -s /usr/local/gcc/bin/gcc gcc
ln -s /usr/local/gcc/bin/g++ g++
 
 
检查版本
gcc -v
g++ -v
 
=====================================================================================
第三部分安装nodeJs
=====================================================================================
 
1、NodeJS下载
https://nodejs.org/en/download/
[root@test1 packages]# wget https://nodejs.org/dist/v4.5.0/node-v4.5.0.tar.gz
 
2、解压安装
tar -zxvf node-v4.5.0.tar.gz
cd node-v4.5.0
./configure --prefix=/usr/local/nodejs
make
make install
 
=============================================
如果configure默认安装路径node复制到bin下:
cp /usr/local/bin/node /usr/sbin/
 
如果configure指定安装路径node复制到bin下:
/usr/local/nodejs/bin/node -v
cp /usr/local/nodejs/bin/node /usr/sbin/
==============================================
 
安装nodeJS时候报:CC: command not found 是因为gcc升级后,同时也删除了cc标签链接至gcc的命令,cc是unix下的产物,linux下的cc就是gcc
 
链接cc至gcc[库]一般放在/usr/bin
ln -s /usr/bin/gcc /usr/bin/cc
 
[系统短命令]一般放在/usr/sbin
cp /usr/local/nodejs/bin/node /usr/sbin/
 
 
安装完成,查看node版本号:
[root@Hongkong node-v4.5.0]# node -v
v4.5.0
[root@Hongkong node-v4.5.0]#
 
 
=====================================================================================
 
依次编译安装下载的依赖包(好像已经自动解压了):
cd /home/installSoft/gcc-4.8.2/contrib/gmp
mkdir build
cd build
../configure
sudo make
sudo make install
 
cd /home/installSoft/gcc-4.8.2/contrib/mpfr
mkdir build
cd build
../configure --prefix=/usr/local/gcc/mpfr-2.4.2 --with-gmp=/usr/local/gcc/gmp-4.3.2
sudo make
sudo make install
 
cd /home/installSoft/gcc-4.8.2/contrib/mpc
mkdir build
cd build
../configure --prefix=/usr/local/gcc/mpc-0.8.1 --with-mpfr=/usr/local/gcc/mpfr-2.4.2 --with-gmp=/usr/local/gcc/gmp-4.3.2
sudo make
sudo make install
 
 
删除原先的目录:
rm -rf /usr/local/gcc
 
编译安装gcc4.8.2
 
cd /home/installSoft/gcc-4.8.2/
mkdir build
../configure --prefix=/usr/local/gcc --enable-threads=posix --disable-checking --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/local/gcc/gmp-4.3.2 --with-mpfr=/usr/local/gcc/mpfr-2.4.2 --with-mpc=/usr/local/gcc/mpc-0.8.1
sudo make
sudo make install
 
 
../configure --prefix=/usr/local/gcc --enable-checking=release --enable-languages=c,c++ --disable-multilib
 
如果make出现configure: error: cannot compute suffix of object files: cannot compile
原来如此,接下来把mpc ,gmp,mpfr 的lib文件夹果断加入到 LD_LIBRARY_PATH 变量
注意此处的三个lib,根据你所安装的路径来设置:
 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gcc/mpc-0.8.1/lib:/usr/local/gcc/gmp-4.3.2/lib:/usr/local/gcc/mpfr-2.4.2/lib
 
 
 
/home/installSoft/node-v4.5.0/out/Release/mksnapshot: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/installSoft/node-v4.5.0/out/Release/mksnapshot)
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
 
查看 GLIBCXX 版本:
[root@Hongkong node-v4.5.0]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
[root@Hongkong node-v4.5.0]#
 
这里并没有查看到: GLIBCXX_3.4.15
 
 
执行以下命令,查找编译 gcc 时生成的最新动态库:
find / -name "libstdc++.so.6"
 
[root@Hongkong node-v4.5.0]# find / -name "libstdc++.so.6"
/home/installSoft/gcc-4.8.2/build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/installSoft/gcc-4.8.2/build/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/installSoft/gcc-4.8.2/build/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/lib64/libstdc++.so.6
/usr/local/gcc/lib64/libstdc++.so.6
[root@Hongkong node-v4.5.0]#
 
取第一条:
/home/installSoft/gcc-4.8.2/build/stage1-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6          (32位|其他)
/home/installSoft/gcc-4.8.2/build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6   (64位|本例)
 
 
将上面的最新动态库 libstdc++.so.6 复制到 /usr/lib   目录下(32位):
将上面的最新动态库 libstdc++.so.6 复制到 /usr/lib64 目录下(64位):
 
在64位系统下复制文件重新覆盖,出现?请输入y
cp /home/installSoft/gcc-4.8.2/build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 /usr/lib64
cp /home/installSoft/gcc-4.8.2/build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 /usr/lib64
cp /ftp/gcc-5.3.0/gcc-build-5.3.0/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 /usr/lib64
 
复制后,修改系统默认动态库的指向,即:重建默认库的软连接。
 
cp /ftp/gcc-5.3.0/gcc-build-5.3.0/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
 
切换工作目录至/usr/lib64:
cd /usr/lib64
 
删除原来软连接:
rm -rf libstdc++.so.6
 
将默认库的软连接指向最新动态库:
ln -s libstdc++.so.6.0.21 libstdc++.so.6
 
完成后再次执行:
[root@Hongkong node-v4.5.0]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
[root@Hongkong node-v4.5.0]#
 
这里已经查看到: GLIBCXX_3.4.15
 
 
添加共享库路径,su到root编辑ld.so.conf文件,添加如下内容到文件中:
vi /etc/ld.so.conf
/usr/local/gcc/mpc-0.8.1/lib
/usr/local/gcc/gmp-4.3.2/lib
/usr/local/gcc/mpfr-2.4.2/lib
 
 
/usr/local/gmp-5.1.3/lib
/usr/local/mpfr-3.1.2/lib
/usr/local/mpc-1.0/lib
 
 
保存退出,执行ldconfig命令
 
 
 
执行以下看看装好没有:
/usr/local/gcc/bin/gcc -v
gcc version 4.8.2 (GCC)
 
 
卸载旧版本
yum remove -y gcc gcc-c++
updatedb
 
 
链接新版本
cd /usr/bin
ln -s /usr/local/gcc/bin/gcc gcc
ln -s /usr/local/gcc/bin/g++ g++
 
 
检查版本
gcc -v
Tags: ,

ArtTemplate_List 实例

[不指定 2016/08/02 16:56 | by 刘新修 ]

ArtTemplate_List 实例1

XML/HTML代码
  1. <!DOCTYPE HTML>  
  2. <html>  
  3. <head>  
  4. <meta charset="UTF-8">  
  5. <title>basic-demo</title>  
  6. <script src="../dist/template.js"></script>  
  7. </head>  
  8.   
  9. <body>  
  10. <div id="content"></div>  
  11. <script id="test" type="text/html">  
  12. {{if isAdmin}}  
  13.   
  14. <h1>{{title}}</h1>  
  15. <ul>  
  16.     {{each list as value i}}  
  17.         <li>索引 {{i + 1}} :{{value}}</li>  
  18.     {{/each}}  
  19. </ul>  
  20.   
  21. {{/if}}  
  22. </script>  
  23.   
  24. <script>  
  25. var data = {  
  26.     title: '基本例子',  
  27.     isAdmin: true,  
  28.     list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']  
  29. };  
  30. var html = template('test', data);  
  31. document.getElementById('content').innerHTML = html;  
  32. </script>  
  33. </body>  
  34. </html  

ArtTemplate_List 实例2

XML/HTML代码
  1. <!DOCTYPE HTML>  
  2. <html>  
  3. <head>  
  4. <meta charset="UTF-8">  
  5. <title>compile-demo</title>  
  6. <script src="../dist/template.js"></script>  
  7. </head>  
  8.   
  9. <body>  
  10. <h1>在javascript中存放模板</h1>  
  11. <div id="content"></div>  
  12. <script>  
  13. var source = '<ul>'  
  14. +    '{{each list as value i}}'  
  15. +        '<li>索引 {{i + 1}} :{{value}}</li>'  
  16. +    '{{/each}}'  
  17. + '</ul>';  
  18.   
  19. var render = template.compile(source);  
  20. var html = render({  
  21.     list: ['摄影', '电影', '民谣', '旅行', '吉他']  
  22. });  
  23.   
  24. document.getElementById('content').innerHTML = html;  
  25. </script>  
  26. </body>  
  27. </html>  
XML/HTML代码
  1. <!DOCTYPE HTML>  
  2. <html>  
  3. <head>  
  4. <meta charset="UTF-8">  
  5. <title>basic-demo</title>  
  6. <script src="../dist/template.js"></script>  
  7. </head>  
  8.   
  9. <body>  
  10. <h1>在javascript中存放模板</h1>    
  11. <div id="content"></div>    
  12. <script>  
  13. /***** 小模版 *****/  
  14. var source=''  
  15. +'<ul>'    
  16. +    '{{each list as value i}}'    
  17. +        '<li>索引 {{i+1}} :{{value}}</li>'  
  18. +    '{{/each}}'    
  19. +'</ul>';  
  20.   
  21. /***** 定义变关联逻辑代码片段(小模版) *****/    
  22. var connectJs=template.compile(source);  
  23.   
  24. /***** 最终的数据源等于==逻辑代码关联数据 *****/  
  25. var htmlData=connectJs({  
  26.     list: ['摄影', '电影', '民谣', '旅行', '吉他']    
  27. });    
  28.   
  29. /***** 把最终处理后的数据源插入到页面 *****/    
  30. document.getElementById('content').innerHTML=htmlData;    
  31. </script>  
  32. </body>  
  33. </html>  

实例访问地址:http://code.liuxinxiu.com/jstpl/artTemplate/demo/best.html

include嵌入子模板:

XML/HTML代码
  1. <!DOCTYPE HTML>  
  2. <html>  
  3. <head>  
  4. <meta charset="UTF-8">  
  5. <title>include-demo</title>  
  6. <script src="../dist/template.js"></script>  
  7. </head>  
  8.   
  9. <body>  
  10. <div id="content"></div>  
  11. <script id="test" type="text/html">  
  12. <h1>{{title}}</h1>  
  13. {{include 'list'}}  
  14. </script>  
  15. <script id="list" type="text/html">  
  16. <ul>  
  17.     {{each list as value i}}  
  18.         <li>索引 {{i + 1}} :{{value}}</li>  
  19.     {{/each}}  
  20. </ul>  
  21. </script>  
  22.   
  23. <script>  
  24. var data = {  
  25.     title: '嵌入子模板',  
  26.     list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']  
  27. };  
  28. var html = template('test', data);  
  29. document.getElementById('content').innerHTML = html;  
  30. </script>  
  31. </body>  
  32. </html>  

理解部分(使用普通for循环加声明语法,进行数组遍历)1:

XML/HTML代码
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>AtrTemplate</title>  
  6. </head>  
  7. <body>  
  8.     <div id="content"></div>  
  9.   
  10.     <script src="js/template-native.js"></script>  
  11.     <script id="test" type="text/html">  
  12.           
  13.         <%for( i = 0; i < content.length; i++) {%>  
  14.         <h1><%=content[i].title%></h1>  
  15.         <p>条目内容 : <%=content[i].list%></p>  
  16.         <%}%>  
  17.       
  18.     // 等同于普通的for循环,在普通的for循环上给每一行语法声明加上<% xx %>  
  19.     // 等同于普通的for循环,在普通的for循环上取值部分加上类似jsp的变量声明 <%= xx %>  
  20.         //for(i=0;i<content.length;i++){  
  21.         //  <h1><%=content[i].title%></h1>  
  22.         //  <p>条目内容 : <%=content[i].list%></p>  
  23.         //}  
  24.           
  25.     </script>  
  26.   
  27.     <script>  
  28.     /***** 自造数据,content为数组List便于测试循环 *****/  
  29.         var data={  
  30.             content:[  
  31.                 {  
  32.                     title: "artTemplate",  
  33.                     list: "新一代 javascript 模板引擎",  
  34.                 },  
  35.                 {  
  36.                     title: "特性",  
  37.                     list: "性能卓越,执行速度快"  
  38.                 }  
  39.             ]  
  40.         };  
  41.     /***** 用template映射数据到逻辑代码区域|也可以理解称给逻辑代码片段绑定数据源 *****/  
  42.         var html=template('test',data);  
  43.     /***** 选择页面Dom元素,插入处理后的数据 *****/  
  44.         document.getElementById("content").innerHTML=html;  
  45.    </script>  
  46. </body>  
  47. </html>  

理解部分(使用普通for循环加声明语法,进行双层嵌套数组遍历)2:

XML/HTML代码
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.    <title>AtrTemplate -- 简介</title>  
  6. </head>  
  7. <body>  
  8.     <div id="content"></div>  
  9.   
  10.     <script src="js/template-native.js"></script>  
  11.     <script id="listtemp">  
  12.   
  13.     </script>  
  14.     <script id="test" type="text/html">  
  15.         //循环嵌套,循环数组里的数组  
  16.         <%for(i=0;i<content.length;i++){%>  
  17.         <h1><%=content[i].title%></h1>  
  18.         <ul>  
  19.             <%for(j=0;j<content[i].list.length;j++){%>  
  20.                 <li><%=content[i].list[j]%></li>  
  21.             <%}%>  
  22.         </ul>  
  23.         <%}%>  
  24.           
  25.     </script>    
  26.     <script>
  27.         var data={  
  28.             content:[  
  29.                 {  
  30.                     title: "artTemplate",  
  31.                     list:["新一代 javascript 模板引擎"]  
  32.                 },  
  33.                 {  
  34.                     title: "特性",  
  35.                     list: [  
  36.                             "性能卓越,执行速度通常是 Mustache 与 tmpl 的 20 多倍",  
  37.                             "支持运行时调试,可精确定位异常模板所在语句",  
  38.                             " 对 NodeJS Express 友好支持",  
  39.                             "安全,默认对输出进行转义、在沙箱中运行编译后的代码(Node版本可以安全执行用户上传的模板)",  
  40.                             " 支持include语句",  
  41.                             "可在浏览器端实现按路径加载模板",  
  42.                             "支持预编译,可将模板转换成为非常精简的 js 文件",  
  43.                             "模板语句简洁,无需前缀引用数据,有简洁版本与原生语法版本可选",  
  44.                             "支持所有流行的浏览器"  
  45.                         ]  
  46.                 }  
  47.             ]  
  48.         };
  49. /***** 用template映射数据到逻辑代码区域|也可以理解称给逻辑代码片段绑定数据源 *****/
  50.         var html=template('test',data);
  51.  
  52. /***** 选择页面Dom元素,插入处理后的数据 *****/
  53.         document.getElementById("content").innerHTML=html;  
  54.     </script>  
  55. </body>  
  56. </html>  

 

Tags:

JS 格式化日期

[不指定 2016/07/15 21:03 | by 刘新修 ]
JavaScript代码
  1. /***** 格式化日期 *****/  
  2. function formatDate(_strTime,_format){  
  3.     var date=new Date(_strTime);  
  4.     var paddNum=function(num){  
  5.         num+="";  
  6.         return num.replace(/^(\d)$/,"0$1");  
  7.     }  
  8.     //指定格式字符  
  9.     var cfg={  
  10.         yyyy:date.getFullYear()                         //年:4位  
  11.         ,yy :date.getFullYear().toString().substring(2) //年:2位  
  12.         ,M  :date.getMonth() + 1                        //月:如果1位的时候不补0  
  13.         ,MM :paddNum(date.getMonth()+1)                 //月:如果1位的时候补0  
  14.         ,d  :date.getDate()                             //日:如果1位的时候不补0  
  15.         ,dd :paddNum(date.getDate())                    //日:如果1位的时候补0  
  16.         ,hh :date.getHours()                            //时  
  17.         ,mm :date.getMinutes()                          //分  
  18.         ,ss :date.getSeconds()                          //秒  
  19.     }  
  20.     _format||(_format="yyyy-MM-dd hh:mm:ss");  
  21.     return _format.replace(/([a-z])(\1)*/ig,function(m){return cfg[m];});  
  22. }  
  23. formatDate("Tue Jul 16 01:07:00 CST 2013","yyyy-MM-dd ");  

webpack 是一个npm包,所以我们通过 npm 命令来全局安装:

D:\wmnp3\nodeJs>npm install webpack -g
安装完成后,命令行下就有 webpack 命令可用,执行 webpack --help 可以查看 webpack 提供的各种命令。
当然如果常规项目还是把依赖写入 package.json 包去更人性化,初始化创建一个package.json文件:
cd D:\wmnp3\wwwroot\nodeJs\MVC\helloWorld
npm init
npm install webpack --save-dev 在当前目录下安装局域的webpack
安装 sass-loader 相关的加载器:
安装 CSS 相关的加载器:
安装配置图片加载器url-loader
它会将样式中引用到的图片转为模块来处理,使用该加载器需要先进行安装:
安装 babel-loader 相关的加载器:
使用Babel转译器,帮助我们将ES6代码转译为主流浏览器支持的ES5代码。
babel-loader加载器能将ES6的代码转换成ES5代码,这使我们现在可以使用ES6了;我们在使用之前,我们需要安装babel-loader
npm install babel-loader --save-dev --registry=https://registry.npm.taobao.org
npm install babel-preset-es2015 --save-dev
安装babel-preset-es2015
安装babel-runtime
ExpressJS启动服务:http://127.0.0.1:3000
webpack相关命令如下:
webpack 最基本的启动webpack命令
webpack -w 提供watch方法,实时进行打包更新
webpack -p 对打包后的文件进行压缩
webpack -d 提供SourceMaps,方便调试
webpack --colors 输出结果带彩色,比如:会用红色显示耗时较长的步骤
webpack --profile 输出性能数据,可以看到每一步的耗时
webpack --display-modules 默认情况下 node_modules 下的模块会被隐藏,加上这个参数可以显示这些被隐藏的模块
webpack --help 帮助说明
 
webpack打包会根据依赖自动并合代码模块,使用webpack -p 压缩代码成一行.从而加快页面请求速度,使用前后对比:
压缩代码前:
压缩入口代码后:
最后附上webpack.config.js 的配置文件:
JavaScript代码
  1. var path=require("path");  
  2. var webpack=require('webpack');  
  3. var ExtractTextPlugin=require("extract-text-webpack-plugin");  
  4. /**** webpack.config.js ****/  
  5. module.exports={  
  6.     context:__dirname+'/assets', //requre('a.js')的时候从哪个路径查找  
  7.     entry:{  
  8.         main:__dirname+"/assets/js/public/main.js",  
  9.         index:__dirname+"/assets/js/public/index.js"  
  10.     },  
  11.     /**** 新添加的module属性 ****/  
  12.     output:{  
  13.         path:__dirname+'/build/js/',  
  14.         filename:'[name].bundle.js', //模版基于entry的key  
  15.         publicPath:"/xfile/" //引用你的文件时考虑使用的地址(可设成http地址, 如:http://cdn.my.com)  
  16.     },  
  17.     /**** 新添加的module属性 ****/  
  18.     module:{  
  19.         loaders:[  
  20.             {  
  21.                 test:/\.(jpg|png|svg)$/i,  
  22.                 loaders:[  
  23.                     'image?...',  
  24.                     'url?limit=10000&name=img/[name].[hash:8].[ext]',  
  25.                 ]  
  26.             },  
  27.             {  
  28.                 test:/\.js$/,  
  29.                 exclude:/(node_modules|bower_components)/,  
  30.                 loader:'babel',  
  31.                 query:{  
  32.                     presets:['es2015'],  
  33.                     plugins:['transform-runtime']  
  34.                 }  
  35.             },  
  36.             {test: /\.css$/,loader: ExtractTextPlugin.extract("style-loader","css-loader")},  
  37.             {test: /\.(jpg|png|svg)$/,loader:"url?limit=8192"},  
  38.             {test: /\.scss$/, loader:"style!css!sass"}  
  39.         ]  
  40.     },  
  41.     plugins:[  
  42.         //new webpack.optimize.CommonsChunkPlugin('common.js'),  
  43.         new ExtractTextPlugin("[name].css"),  
  44.         new webpack.ProvidePlugin({  
  45.             "jQuery":path.resolve(  
  46.                 __dirname,  
  47.                 "js/lib/jquery/jquery-1.8.3.js"  
  48.             ),  
  49.             "$":path.resolve(  
  50.                 __dirname,  
  51.                 "js/lib/jquery/jquery-1.8.3.js"  
  52.             )  
  53.         }),  
  54.     ]  
  55. }  
Tags: ,

requireJS在Node平台安装、创建build实例、JS模块化加载、打包

requireJS在Node平台上安装(推荐使用NodeJs绿色版环境套件):

C++代码
  1. npm install -g requirejs
  2. D:\wmnp3\wwwroot\nodeJs\MVC\helloWorld>npm install -g requirejs  
  3. npm http GET https://registry.npmjs.org/requirejs  
  4. npm http 200 https://registry.npmjs.org/requirejs  
  5. npm http GET https://registry.npmjs.org/requirejs/-/requirejs-2.2.0.tgz  
  6. npm http 200 https://registry.npmjs.org/requirejs/-/requirejs-2.2.0.tgz  
  7. D:\wmnp3\nodeJs\r.js -> D:\wmnp3\nodeJs\node_modules\requirejs\bin\r.js  
  8. D:\wmnp3\nodeJs\r_js -> D:\wmnp3\nodeJs\node_modules\requirejs\bin\r.js  
  9. requirejs@2.2.0 D:\wmnp3\nodeJs\node_modules\requirejs  
  10.   
  11. D:\wmnp3\wwwroot\nodeJs\MVC\helloWorld>  

 

创建build.js (对应wmnp环境套件:D:\wmnp3\nodeJs\build\test.build.js)

JavaScript代码
  1. ({  
  2.     appDir:'../../wwwroot/nodeJs/MVC/helloWorld/public/js',  
  3.     baseUrl:'test',  
  4.     dir:'../../wwwroot/nodeJs/MVC/helloWorld/public/js/test-built',  
  5.     paths:{  
  6.         jquery:'empty:'  
  7.     },  
  8.     modules:[  
  9.         {  
  10.             name:'b'  
  11.         },  
  12.         {  
  13.             name:'c'  
  14.         },  
  15.     ]  
  16. })  
  17.   
  18. /**********************************************
  19. "appDir": "./",     /**** 应用根路径 ****
  20. "dir": "dist",      /**** 打包的文件生成到哪个目录
  21. "optimize": "none", /**** 是否压缩 ****
  22. ***********************************************/  

实例1(对应wmnp环境套件:http://127.0.0.1:3000/test_page)::

JavaScript代码
  1. /***************************************************************
  2. require.config(); 等同于 requirejs.config();
  3. ***************************************************************/  
  4. requirejs.config({  
  5.     baseUrl:'/js/test',  
  6.     paths:{  
  7.         jquery:'../lib/jquery.min',  
  8.         hello:'hello',  
  9.         afile:'a',  
  10.         bfile:'b',  
  11.         cfile:'c',  
  12.     },  
  13.     shim:{  
  14.         only:{exports:'only'},  
  15.         /***** shim中hello源对应paths模块hello.JS *****/  
  16.         hello:{  
  17.         /***** 用exports导入当函数,必须换成 init 函数导入多个函数的文件 *****/  
  18.           init:function(){  
  19.             return{  
  20.               uinfos:"liuxinxiu",  
  21.               hello1:hello1,  
  22.               hello2:hello2  
  23.             }  
  24.           }  
  25.         }  
  26.     }  
  27. });  
  28.   
  29. /******************************************************************************************************
  30. require和define 都可以加载依赖元素(都是用于加载依赖)
  31. 1. require 要用于加载类相关JS文件,build后不参与代码合并,所用到的资源只进行压缩,http自动请求其他文件.
  32. 2. define  真正意义上的模块化处理,load本文件及外文件内的代码片段,build后参与代码合并,http自动请求其他文件.
  33. ******************************************************************************************************/  
  34. /***********************************************************
  35. require(['afile','bfile','cfile'],function(a,b,c){
  36.     var x1=require("afile");
  37.     var x2=require("bfile");
  38.     var x3=require("cfile");
  39. });
  40. ***************************************************************/  
  41.   
  42. /**************************************************************
  43. define(['bfile'],function(b){
  44.     console.log('run c.js :'+b.color+','+b.width);
  45. });
  46. ***************************************************************/  
  47. requirejs(["http://code.liuxinxiu.com/php/Interface/getUserInfo.php?Jsoncallback=define"],  
  48.     function(data){  
  49.         //The data object will be the API response for the  
  50.         //JSONP data call.  
  51.         console.log(data);  
  52.     }  
  53. );  
  54.   
  55. require(['jquery'],function(){  
  56.     /***** 调用后写入你的jq代码 *****/  
  57.     $("body").attr("yy","111");  
  58. });  
  59.   
  60.   
  61.   
  62. /******************************************************************************
  63. require.config();
  64. 1. shim中exports定义好的函数可以用    (requirejs+define)引入并使用
  65. 2. shim中init定义好的函数则必须以用 (define)引入并使用
  66. *************************************************************************/  
  67. requirejs(['only'],function(only){  
  68.     only();  
  69. });  
  70.   
  71. define(['hello'],function(data){  
  72.     /***** 定义值直接取,函数直接调用 *****/  
  73.     console.log(data.uinfos);  
  74.     data.hello2();  
  75. });  

实例2(对应wmnp环境套件:http://127.0.0.1:3000/test_load)::

JavaScript代码
  1. requirejs.config({  
  2.     baseUrl:'/js/test',  
  3.     paths:{  
  4.         "afile":'a?y=1',  
  5.         "bfile":'b',  
  6.         "cfile":'c',  
  7.         "core1":'cores/core1',  
  8.         "core2":'cores/core2',  
  9.         "util1":'utils/util1',  
  10.         "util2":'utils/util2',  
  11.         "service1":'services/service1',  
  12.         "service2":'services/service2',  
  13.     }  
  14. });  
  15.   
  16.   
  17. /***************************************
  18. ****************************************/  
  19. require(['c'],function(){  
  20.      //a();  
  21. })  

执行(压缩/打包):D:\wmnp3\nodeJs>node node_modules\requirejs\bin\r.js -o build\test.build.js

Tags:
第一页 上页 7 8 9 10 11 12 13 14 15 16 下页 最后页 [ 显示模式: 摘要 | 列表 ]