node.js是什么?
- node.js不是一门语言
- node.js不是库,不是框架
- node.js是JavaScript运行时的环境
- 简单来说就是node.js可以解析和执行JavaScript代码,跟浏览器很像。
- 以前只有浏览器可以解析执行JavaScript代码,现在node.js可以脱离浏览器来运行
浏览器中的JavaScript
- EcmaScript
- DOM
- BOM
node.js中的JavaScript
- 没有DOM、BOM
- 有EcamScript
- 服务端不处理DOM、BOM元素
- 在node这个JavaScript执行环境中为JavaScript提供了一些服务器级别的操作API
例如文件读写
网络服务的构建
http服务器等。。
node.js特性
- event-driven 事件驱动
- non-blocking I/O model 非阻塞IO模型(异步)
- lightweight and efficient 轻量和高效
- npm
– npm是世界上最大的开源库生态系统
– 绝大多数JavaScript相关的包都存放在了npm上,这样做的目的是为了让开发人员更加方便的去下载使用
node.js怎么用
- List item
– 先下载
https://www.runoob.com/nodejs/nodejs-install-setup.html
菜鸟教程写的很清楚,按照步骤走就行了 - 写代码的地方
– 跟js代码一样,用hbuilder,sumlime等都可以编辑 - 查看结果的地方
– 跟html不同,这个没法直接在网页中查看,可以直接在js所在文件shift加右键打开命令行,然后输入code+空行+要打开的js文件,就可以查看结果了。也可以在终端查看,也就是网页中。
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 发送响应数据 "Hello World"
response.end('Hello World\n');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
然后浏览器输入127.0.0.1:8888可以看到hello world
注意:不要用node来命名,名字中不能有空格,不能有中文字
读取文件
浏览器中的JavaScript是没有文件操作能力的,但是node.js中的JavaScript具有文件操作能力
fs是file-system的简写,就是文件系统的意思
在node中如果想要操作文件,就必须引入fs这个核心模块,这个模块提供了所有关于文件操作的API
例如fs.readFile 就是来读取文件的
先引入:var fs = require(‘fs’);
fs.readFile(‘被读文件路径’,function(error,data){
console.log(data.toString())
})
注意要toString,没有的话读出来的是二进制,用户没法查看
如果错误,error为null
可以
if(error){
console.log(错误提醒)
}else{
说明没错
}
阻塞代码实例
var fs = require(“fs”);
var data = fs.readFileSync(‘input.txt’);
console.log(data.toString());
console.log(“程序执行结束!”);
必须在读取文件完成后才能执行其他程序
非阻塞代码实例
var fs = require(“fs”);
fs.readFile(‘input.txt’, function (err, data) {
if (err) return console.error(err);
console.log(data.toString());});
console.log(“程序执行结束!”);
不需要等待文件读取完
第二个实例我们不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。
因此,阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。
头部导入
node提供了很多操作,这些操作进行前都必须引入相对应的头部,类似于java引入包一样
var os = require(‘os’)//获取机器信息的的
var http = require(‘http’)//操作网页的
var path = require(‘path’)//用来操作路径的
有了这些引入之后,就可以使用他的操作了
os.cpus()//获取当前机器的cpu信息
os.totalmem()//查看当前机器的内存
path.extname()获取括号内文件的后缀
还有很多其他操作,之后遇到在慢慢补充。
http
-
加载http核心模块
var http = require(‘http’)
-
使用http.createServer()方法创建一个Web服务器。返回一个Server实例
var server = http.createServer() -
注册request请求事件。当客户端请求过来,就会自动触发服务器的request请求事件,然后执行第二个参数,回调处理第二个参数里的回调
server.on(‘request’,gunction(){
console.log(‘收到客户端的请求了’)
)} -
绑定端口号,启动服务器(不被占用的)
server.listen(3000,function(){
console.log('服务器启动成功了,可以通过http://127.0.0.1:3000/ 来访问)
})
http接受数据
response对象有一个方法:write可以用来给用户端发送响应数据
write可以使用多次,但是最后一定要使用end来结束响应,要不然客户端会一直等待
response.write(‘hello’)
esponse.write(‘world’)
告诉客户端,我的话说完了,你可以呈现给用户了
response.end()
浏览器显示中文乱码问题
var http = require('http');
http.createServer(function (request, response) {
response.end('hello 世界');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
打开浏览器显示信息:
hello 涓栫晫
很多时候都有乱码情况,我们经常遇到,只需要知道node的修改方法写在哪就行了
var http = require('http');
http.createServer(function (request, response) {
response.setHeader('Content-type','text/plain;charset=utf-8')//加入这行代码
response.end('hello 世界');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
打开浏览器显示信息:
hello 世界
plain指的是普通文本 如果返回的结果想被页面渲染,text/html
var http = require('http');
http.createServer(function (request, response) {
response.setHeader('Content-type','text/plain;charset=utf-8')//加入这行代码
response.end('<a href="">点我</a>');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
结果为一个可点击的a链接
Express
原生的http 在某些方面表现不足以应对我们的开发需求,所以我们就需要使用框架来加快我们的开发效率,框架
的目的就是提高效率,让我们的代码更高度统一。
在Node中,有很多Web开发框架,我们这里以学习express 为主。
安装
npm i -S express 命令,安装好后一个简单示范:
//0,安装
//1,引包
var express = require('express')
//2,创建服务器应用程序,原来的http.createSeaver
var app = express()
app.get('/',function(req,res){
res.send('hello world')
})
app.listen(3000,function(){
console.log('app is running')
})
结果显示hello world
公开文件夹
app.use('/public/',express.static('./public/'))
这样用户就可以直接访问文件夹里的内容
使用art-template模板引擎
1、安装
npm install --save art-template
npm install --save express-art-template
2、配置
app.engine( 'html', require('express-art-template'))
3、使用
app.get('/admin',function(req,res){
res.render('user.html',{
name:'小影'
})
})
获取post请求
在Express中没有内置获取表单POST请求体的API,这里我们需要使用一个第三方包:body-parser.
安装:
npm install --save body-parser
配置:
var express = require('require')
//引包
var bodyParser = require('body-parser')
var app = express()
//配置body-parser
//主要加入这个配置,req上就会多出来一个属性:body
//可以直接通过req.body来获取表单POST请求数据了
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json())
app.use(function(req,res){
res.setHeader('Content-Type','text/plain')
res.write('you posted:\n')
res.end(JSON.stringify(req.body,null,2))
})
先到这,之后会继续补充的
4万+

被折叠的 条评论
为什么被折叠?



