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的主要内容,如果未能解决你的问题,请参考以下文章