您的位置:首页 > Web前端 > Node.js

nodejs

2016-05-25 16:08 597 查看


1.nodeJS 入门
方法一:
a.js内容
console.log('hello');
cmd 进入到相应目录
node a.js 就可以看到结果
方法二:
直接cmd 输入 node 回车,再 console.log('hello');回车, 也可以看到结果   退出输入 .exit或者 ctrl+d

2.写一个server.js当服务器, 最终 浏览器访问127.0.0.1:8888 可看到服务器端返回的内容
server.js内容

var http=require('http');

http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/plain'});
response.end('hello a');
}).listen(8888);

console.log('server running');

3.安装 express [没具体应用]
npm install express

4. node 可以定义变量,进行计算
cmd:  node  x=10 y=20 x+y  每一个都要回车,结果为30
5.读取文件内容【回调函数】
不需要等文件读取完,先执行下面的程序,等文件读取完,作为回调函数的参数返回输出。在读取文件时同时执行接下来的代码,大大提高了程序的性能。  先输出 game over 再输入文件内容
main.js

var fs=require('fs');

var data=fs.readFile('a.js',function(err,data){
if(err)return console.error(err);
console.log(data.toString());
});
console.log('game over');

node main.js


二 代码来源于手册

// console.log("this is a");

//  emiter

/*
var events= require('events');
var eventEmitter = new events.EventEmitter();
eventEmitter.on('a',function(){    //注册函数a
console.log('a event asf');
});

eventEmitter.emit('a');      // 触发函数a
*/

// stream读取文件
/*
var fs=require("fs");
var data='';
var readStream= fs.createReadStream('main.js');

readStream.setEncoding('utf8');

readStream.on('data',function(chunk){   //读数据
data+=chunk;
});

readStream.on('end',function(){      // 输出数据
console.log(data);
});

readStream.on('error',function(err){
console.log(err.stack);

});
*/
//  stream 写文件
//  cmd下 type a.txt 是查看文件内容
/*
var fs=require("fs");
var data='this is the new data';
var writeStream=fs.createWriteStream('a.txt');
writeStream.write(data,'utf8');
writeStream.end();    //标记文件末尾
writeStream.on('finish',function(){
console.log("ok");
});

writeStream.on('error',function(){
console.log(err.stack);
});
*/
//  把文件a 内容复制到 文件b
/*
var fs=require("fs");
var readStream=fs.createReadStream('main.js');
var writeStream=fs.createWriteStream("a.txt");
readStream.pipe(writeStream);
console.log("game over");
*/
//  压缩文件 a.txt 为  a.txt.gz
/*
var fs=require("fs");
var zlib=require("zlib");
fs.createReadStream('a.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('a.gz'));

console.log('ok2');
*/
//   解压 a.txt.gz   跟传统解压的效果不太一样
/*
var fs=require("fs");
var zlib=require("zlib");
fs.createReadStream('a.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('c.txt'));
console.log("ok...");
*/

// 引进 hello.js 调用world()方法
/*   // 方法一
var hello = require("./hello");
hello.world();
*/

//  方法二
/*
var Hello = require('./hello');
hello = new Hello();
hello.setName('aaa');
hello.sayHello();
*/

// hello.js

/*
//   方法一
exports.world=function(){
console.log('hello');
}
*/

/*
//  方法二
function Hello(){
var name;
this.setName=function(setName){
name=setName;
};
this.sayHello=function(){
console.log("hello "+name);
};
};
module.exports = Hello;  // 提供外部访问

*/


js 面向对象写法推荐

<script>
// js面向对象:组合构造函数+原型模式【推荐】
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.lessons=['Math','chinese'];
}
Person.prototype = {           // 原型模式提供 对象实例共享
constructor : Person,
getName: function(){
return 'hello, '+this.name;
}
}

var person1 = new Person('xiao',19,'software');
person1.lessons.push('biology');
var person2= new Person('he',11,'english');
alert(person1.lessons);
alert(person2.lessons);
alert(person1.getName === person2.getName);   // 共享方法
alert(person1.getName());

</script>


三、

// stat 获取文件信息
/*
var fs=require('fs');
fs.stat('nodejs.txt',function(err,stats){

if(err){
return console.error(err);
}
console.log(stats);
console.log(stats.isFile());
});
*/
// writeFile 写文件  readFile 读文件
/*
var fs=require('fs');
fs.writeFile('b.txt','this is b',function(err){
if(err){
return console.error(err);
}
});
console.log('write is ok');
fs.readFile('b.txt',function(err,data){
if(err){
return console.err(err);
}
console.log("the content is: "+data.toString());
});
*/
//删除文件
/*
var fs=require('fs');
fs.unlink('b.txt',function(err){
if(err)return console.log(err);
});
console.log('ok');
*/
// 创建目录
/*
var fs=require('fs');
fs.mkdir("D:/test0518/test",function(err){
if(err)return console.log(err);

});

console.log('ok');
*/
// 读取 目录
/*
var fs=require('fs');
fs.readdir("D:/test0518",function(err,files){
if(err)return console.log(err);
files.forEach(function(file){
console.log(file);
});
});

console.log('ok');
*/
//删除目录
/*
var fs=require('fs');
fs.rmdir("D:/test0518/test",function(err,files){
if(err)return console.log(err);

});

console.log('ok');
*/
//  获取 请求内容 get     http://127.0.0.1:8888?name=a&age=12 /*
var http=require('http');
var url=require('url');
var util=require('util');
http.createServer(function(req,res){
res.writeHead(200,{'Content-type':'text/plain'});
res.end(util.inspect(url.parse(req.url,true)));
}).listen(8888);
*/
//  获取 请求内容 post   不太懂
/*
var http=require('http');
var util=require('util');
var querystring=require('querystring');
http.createServer(function(req,res){
var post='';
req.on('data',function(chunk){
post+=chunk;
});
req.on('end',function(){
post=querystring.parse(post);
res.end(util.inspect(post));
});
}).listen(8888);

*/
// 复杂版
/*
var http = require('http');
var fs = require('fs');
var url = require('url');

// 创建服务器
http.createServer( function (request, response) {
// 解析请求,包括文件名
var pathname = url.parse(request.url).pathname;

// 输出请求的文件名
console.log("Request for " + pathname + " received.");

// 从文件系统中读取请求的文件内容
fs.readFile(pathname.substr(1), function (err, data) {
if (err) {
console.log(err);
response.writeHead(404, {'Content-Type': 'text/html'});
}else{
response.writeHead(200, {'Content-Type': 'text/html'});

response.write(data.toString());
}
//  发送响应数据
response.end();
});
}).listen(8081);

console.log('Server running at http://127.0.0.1:8081/'); */

// 简单版   服务端
/*var http=require('http');
var fs = require('fs');
var url = require('url');

http.createServer(function(request,response){
var pathname = url.parse(request.url).pathname;     //获取url文件名
fs.readFile(pathname.substr(1),function(err,data){           //读文件
//if(err)return console.log(err);
response.writeHead(200,{'Content-Type':'text/plain'});
response.end(data.toString());
});
}).listen(8888);
console.log("ready..");

//  http://127.0.0.1:8888/a.html */

/*
express
安装四个模块
$ npm install express --save
$ npm install body-parser --save
$ npm install cookie-parser --save
$ npm install multer --save

*/


cmd 操作

cls 清屏
type a.txt 查看文件内容

最简express

var express = require('express');
var app=express();
app.get('/',function(req,res){              // 127.0.0.1:8081
res.send('express page');               // 输出内容
});
app.listen(8081);
console.log('server is staring');


访问不同页面,静态资源等

var express = require('express');
var app = express();

app.use(express.static('public'));
//访问静态资源 :        http://127.0.0.1:8081/image/123.png 
//  主页输出 "Hello World"
app.get('/', function (req, res) {
console.log('index get13');
res.send('Hello GET');
})

//  POST 请求
app.post('/', function (req, res) {
console.log("主页 POST 请求");
res.send('Hello POST');
})

//  /del_user 页面响应           http://127.0.0.1:8081/del_user app.get('/del_user', function (req, res) {
console.log("/del_user 响应 DELETE 请求");
res.send('删除页面');
})

// 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求
app.get('/ab*cd', function(req, res) {
console.log("/ab*cd GET 请求");
res.send('正则匹配');
})

var server = app.listen(8081, function () {

var host = server.address().address
var port = server.address().port

console.log("here http://%s:%s", host, port)

})


表单get post node a.js

post 要加 urlencodedParser

get 获取表单值 使用query; post 使用 body

a.js

/**
* Created by Administrator on 2016/5/27 0027.
*/
var express = require('express');
var app = express();
var bodyParser = require('body-parser');         // post 专用
var urlencodedParser = bodyParser.urlencoded({extended:false})  // post 专用
app.use(express.static('public'));   // 静态资源

app.get('/', function (req, res) {
console.log('the root is '+__dirname);
res.sendFile( __dirname + "/" + "index.html" );   // 指向具体页面
})

app.post('/process_get',urlencodedParser, function (req, res) {
//  post 要加参数  urlencodedParser  req.body.first_name  中间是body
// get  req.query.first_name 中间是 query
// 输出 JSON 格式
response = {
first_name:req.body.first_name,
last_name:req.body.last_name
};
console.log(response);
res.end(JSON.stringify(response));
})

var server = app.listen(8081, function () {

var host = server.address().address
var port = server.address().port

console.log("应用实例,访问地址为 http://%s:%s", host, port)

})


对应的index.html post 提交 127.0.0.1:8081

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="http://127.0.0.1:8081/process_get" method="post">
First Name: <input type="text" name="first_name">  <br>

Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
</form>
</body>
</html>


表单文件上传

/**
* Created by Administrator on 2016/5/27 0027.
*/
var express = require('express');
var app = express();
var fs=require('fs');

var bodyParser = require('body-parser');         // post 专用
var urlencodedParser = bodyParser.urlencoded({extended:false})  // post 专用
var multer = require('multer');

app.use(multer({dest:'/public/'}).array('image'));

app.get('/', function (req,res) {
res.sendFile(__dirname+"/"+"index.html");
})
app.post('/process_get',urlencodedParser, function (req, res) {
var des_file= __dirname+"/"+req.files[0].originalname;
fs.readFile(req.files[0].path, function (err,data) {   //读取上传的文件
fs.writeFile(des_file,data, function (err) {   //  把文件 写到 目的地
if(err){
console.log(err);
}else{
response={
message:'file is ok ',
filenmae:req.files[0].originalname
}
}
console.log(response);
res.end(JSON.stringify(response));
})
})
})

var server = app.listen(8081);
console.log('ok');


index.html

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="http://127.0.0.1:8081/process_get" method="post" enctype="multipart/form-data">

<input type="file" name="image"/>
<input type="submit" value="Submit">
</form>
</body>
</html>


json 增删查

var express = require('express');
var fs = require('fs');
var app= express();

var user={
"user5":{
"name":"a5",
"passowrd":"b5",
"profession":"stu5",
"id":5
}
}
app.get('/', function (req, res) {
fs.readFile(__dirname+"/"+"users.json","utf8", function (err,data) {
data=JSON.parse(data); // 转成 json
/*    data.user5 = user.user5;   //添加数据
//  方式二    data["user5"]=user["user5"];
res.end(JSON.stringify((data)));  //  转回  string
*/
/*
var user=data["user"+req.params.id];     // 取具体数据,  app.get('/:id') 要加" :id "
res.end(JSON.stringify(user));           //  127.0.0.1:8081/2
*/
//  删除操作
var id=2;
delete data["user"+id];
res.end(JSON.stringify(data));
})
})
app.listen(8081);


users.json

{
"user1": {
"name": "mahesh",
"password": "password1",
"profession": "teacher",
"id": 1
},
"user2": {
"name": "suresh",
"password": "password2",
"profession": "librarian",
"id": 2
},
"user3": {
"name": "ramesh",
"password": "password3",
"profession": "clerk",
"id": 3
}
}


node.js 入门经典 第5章 P56

node.js入门经典

1.模块默认本地安装
express 可能需要全局安装  npm install express -g

2.利用package.json来安装所需要模块
a.js
var _ = require('underscore');
_.each([1,2,3],function(num){
console.log("xx: "+num);
})
再创建一个名为 package.json文件
{
"name":"test",
"verson":"0.1",
"dependencies":{
"underscore":"~1.2.1"
}
}
把项目中所需要的模块 都写在 dependencies中
最后, npm install 就会自动安装所需要模块

3.nodejs 处理 并发(同时发生)
4.回调
$('p').hide('slow',function(){alert(1);});
hide()函数有两个参数,一个是slow,另一个是 function(){alert(1)};
hide()函数执行完后,第二个参数(函数)会被调用

5.阻塞
程序先后执行,后面的程序无法先执行,就是阻塞

6.异步(非阻塞),都是基于回调来实现,把请求的响应结果都放到回调函数来实现。于是,可以发出N个请求,然后,哪个请求响应完了,就先后返回


node.js 入门经典 第6章 P68

回调的实现是基于事件循环。
事件循环: nodejs使用javascript的事件循环来支持异步编程。javascript围绕事件循环设计。
事件循环规则:函数必须快速返回,函数不得阻塞。长时间运行的操作必须移到另一个进程中。
异步代码解决网络问题。

// 获得 主机 端口 路径名
var url=require('url');
var requestURL='http://baidu.com:1234/pathname?query=a';
var hostname=url.parse(requestURL).hostname;      //  baidu.com
var port=url.parse(requestURL).port;               // 1234
var pathname=url.parse(requestURL).pathname;       //  /pathname
console.log(hostname+'..'+port+'..'+pathname);

//  底层http 路由
var http=require('http');
var url=require('url');
http.createServer(function(request,response){

var hostname=url.parse(request.url).hostname;
var port=url.parse(request.url).port;
var pathname=url.parse(request.url).pathname;       //  /pathname
console.log(hostname+'..'+port+'..'+pathname);   //  hostname、port为空,不懂。。

if(pathname=='/a'){
response.writeHead(200,{'Content-Type':'text/plain'});
response.end('ao');
}else{
response.writeHead(200,{'Content-Type':'text/plain'});
response.end('null o');
}

}).listen(8888);

npm install <name> --save    // 初次安装没有 package.json 文件  --save 无效。
安装的同时,将信息写入package.json中项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包,这样代码提交到github时,就不用提交node_modules这个文件夹了。

console.log(__dirname);   // 当前文件所在路径

// 最简express
var express=require('express');
var app=express();
app.get('/', function (req,res) {
res.send('hello');
});

app.listen(8888);
console.log('ready')

//最简 http
var http=require('http');

http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/plain'});
response.writeHead(301,{'Location':'http://www.baidu.com'})   //301重定向
response.end('hello a');
}).listen(8888);

console.log('server running');

npm install express -g   把express 安装到  C:\Users\Administrator\AppData\Roaming\npm去了


express web模块 P74

express安装
npm install express -g  // 默认安装最新版 4.0+
npm install express-generator   //  安装 express 4.0+要再安装这个
开始创建项目
express helloworld   //创建目录
cd helloworld && npm install  //安装所需要依赖包
npm start //   运行app http://localhost:3000 就可以访问内容了


nodejs module.export()

a1.js b1.js a1.js部分共享

//  b3.js
var a=require('./a.js');
console.log(a.test1());
console.log("a.name: "+a.name);
//console.log("a: "+a);
console.log("new Date(): "+new Date());


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: