node.js

Posted donghongbo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js相关的知识,希望对你有一定的参考价值。

1.nodeJs概述

后面好像有个js,那和咱们脑子里js一样吗~~~哈哈哈,你猜

咱们了解的javascript里有几种对象呢??
内置对象,本地对象,宿主对象
咱们的js是运行在客户端的呢

node.js是运行于服务端的语言,那么它的竞争对手有谁呢?php、jsp、asp.net等等

nodejs里有什么对象呀,除了一些个ecma的原生对象之外,还有1000+的对象,哈哈哈哈哈哈,6不6

对于咱们来说,一种语言通吃前后端,并且可以增加咱们的竞争力,哈哈哈,控制下自己的情绪
node是使用C++编写的基于V8引擎的JS运行环境,同时提供了很多基于ECMAScript的扩展对象。

那么nodejs和其他后端编程语言有什么区别嘞
nodejs是基于ECMAScript语言开发的服务端语言,可以编写独立的服务端应用,也可以向客户端提供Web内容,无需借助与任何Web服务器(apache)可以去连接文件系统,还能操作数据库

nodejs适合高并发、I/O密集型,可伸缩的网路应用,数据写入读取的应用比较好

nodejs不适合CPU密集型的应用,各种计算的就不太适合

nodejs的性能怎么样呢,和php来做比较的话,如果有3000并发连接,持续30秒的压力下嘞
输出“hello world” 的响应的话呢,
php每秒响应3624个请求
nodejs每秒响应7677个请求

那么如果操作mysql
php每秒响应请求为1293个
nodejs每秒响应请求3000个

也就说nodejs在做web应用的时候,要比php好很多

所以说node的性能是不是老好了呢

nodejs的价值在哪呢,对于咱们来说,最好的,就是node提供给咱们的机会和平台。


2.nodejs的两种运行模式
1.交互模式:REPL模式 read evaluate print loop
也就直接在cmd输入node后就能在cmd里去写js代码,就和谷歌浏览器控制台一样,而且,自带打印功能,这就是识别咱们的操作,并且打印出来,适合做测试,但是注意哟,没有BOM和DOM对象哦,比如,试试alert呗
输入一行,执行一行

2.脚本模式:把要执行的代码置于一个文件中,然后去运行
可以有js后缀,也可以什么后缀都没有
node xx.js
这才是开发应用的模式

2.nodeJs常用模块-----queryString模块

什么是模块呢,想想方积木的盒子
因为nodejs有1000+对象,太乱了吧,都是全局对象的话,就更不好处理了,node把一堆一堆的对象,放到分类的模块里去

HTTP协议规定,请求消息可以在url后面追加一个?开头的querystying,用于向服务器提交请求数据

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=node.js&oq=node%E6%96%87%E6%A1%A3&rsv_pq=f3436c790004285f&rsv_t=7782AW2lXNgW1ezvIWJtvwsnbMA6TBJEh3kuYaSqs6ddKvSLeczqB529VAc&rqlang=cn&rsv_enter=1&inputT=639&rsv_sug3=38&rsv_sug1=28&rsv_sug7=100&bs=node%E6%96%87%E6%A1%A3

?后面这一堆就是querystring

那么node提供了一个 querystring的模块,用于解析键值对的 querystring


querystring.stringify(obj[, sep][, eq][, options])
将一个对象序列化化为一个 query string 。

querystring.parse(str[, sep][, eq][, options])
将 query string 反序列化为对象

var qs=require("querystring");
var obj = qs.parse(‘foo=bar&baz=qux&baz=quux&corge‘);
console.log(obj);
var str=qs.stringify(obj);
console.log(str)

5.nodejs常用模块 -----url模块

这个模块包含分析和解析 URL 的工具。调用 require(‘url‘) 来访问模块。
操作看文档了哦~~~

6.nodejs常用模块 -----fileSystem模块
用于操作文件系统---读写目录和读写文件

这个模块里好多功能呢,咱们学两个哈

1.读取文件 异步读取 fs.readFile
var fs = require(‘fs‘);
fs.readFile(‘./file/a.html‘,function(err,data){
console.log(data.toString())
})
console.log(1)
先输出1,后输出内容

同步执行
var buff=fs.readFileSync(‘./file/a.html‘);
console.log(buff.toString())
console.log(1)
先输出内容,在输出1

注意这里不转换字符串的话是一堆《buff 05....的东西,这是读取文件后放到缓冲区的一种显示方式,需要转换一下

2.写入文件

var fs = require(‘fs‘);

var html = ‘系统日志:‘+new Date();

fs.writeFileSync("./file/system.log",html);

往哪个文件里写东西 ,如果没有这个文件,会创建,但是必须有这个目录
那么这个是同步写入,当然也有异步的咯

fs.writeFile(‘message.txt‘, ‘Hello Node‘, function (err) {
if (err) throw err;
console.log(‘It\‘s saved!‘);
});

但是注意,会全部覆盖,这样不好,追加的还是好点,来去看看有没有

fs.appendFileSync(filename, data[, options])
当然也有异步的咯

 

fs.appendFile(‘message.txt‘, ‘data to append‘, function (err) {
if (err) throw err;
console.log(‘The "data to append" was appended to file!‘);
});

做个任务,做个复制功能,复制一个文件

var fs=require("fs");

var html=fs.readFileSync("./file/a.html");

fs.writeFileSync("./file/aa.html",html)



7.nodejs常用模块 -----http模块

http协议内容:

1.请求消息
2.响应消息

nodejs的http模块可以用于接受客户端的请求消息,读取其中的请求数据,向客户端返回响应消息--web服务器

也就是说这个模块就是实现web服务器的模块

怎么去写呢?


var http = require(‘http‘);
var url=require("url");

//和创建一个web服务器
var server = http.createServer();
//让web服务器能处理客户端连接请求,callback两个参数分别是请求消息和响应消息
server.on("request",function (request,response) {
console.log(arguments)
})
//让web服务器监听指定端口
server.listen(1234,function(){
console.log("开始监听了哟")
})

request里有请求头、请求方法、请求的url等信息


练习,获取到传过来的数据

console.log(url.parse(request.url,true).query)




这里这是服务器接收到请求,那么怎么去做一个返回呢,也不能一直转吧

//设置响应状态码和响应头,必须有这个响应头
response.writeHead(200,{‘Content-Type‘:‘text/html;charset=UTF-8‘});

//输出响应内容
response.write("<h1>this is my server</h1>");
response.write(‘<p>welcome~~~</p>‘);
//结束响应主体的输出
response.end();


但是现在不管地址栏怎么 后面 写咱们都只能返回这个东东,那么为什么呢???

做一个练习哟。让咱们后面输入不同的东西就能访问到不一样的页面,如果没有的话,跳到404页面




var sourceName=‘./file/‘+request.url.substr(1);
var html;
fs.readFile(sourceName,function(err,data){
if(err){
html=fs.readFileSync("./file/404.html");
}else{
html=data.toString();

}
response.writeHead(200,{‘Content-Type‘:‘text/html;charset=UTF-8‘});
response.write(html);
response.end();
});




8.nodejs常用的第三方模块----MySql模块

nodejs官方提供了二三十个模块,但是不够用,如缺少访问mysql数据库的模块,需要到第三方网址下载,比如世界最大的nodejs第三方模块集散地:
https://npmjs.org


放好之后,可以去试试连接数据库并操作数据,执行sql语句,玩玩

var mysql=require("mysql");

var conn=mysql.createConnection({
host:"127.0.0.1",
user:"root",
password:"",
database:"test"
})
var sql="INSERT INTO `test`.`user` (`id`, `name`, `password`) VALUES (NULL, ‘tom‘, ‘aa‘);"
conn.query(sql,function(err,result){
if(err){
console.log(err);
}else{
//影响的行数
console.log(result.affectedRows)
//插入的id
console.log(result.insertId)
}

})

conn.end();


练习select语句



var sql="SELECT * FROM `test`.`user`"
conn.query(sql,function(err,result){
if(err){
console.log(err);
}else{
console.log(result)
}
})
















































































































































































以上是关于node.js的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 入门

Node.js

Node.js

一初始Node.js

一初始Node.js

一初始Node.js