node基础应用
Posted wangshuai33
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node基础应用相关的知识,希望对你有一定的参考价值。
node基础应用
1.概念
> 1.Node.js 基于javascript开发,运行在服务端。
> 2.事件驱动、非阻塞I/O
> 3.基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
2.实操
2.1 安装 node
> [node 官网](http://nodejs.cn)
> 检查是否安装成功
> `node -v /--version`
2.2 简单使用
> 1. node和浏览器一样可以执行js文件 cmd 打开命令窗口 在终端输入 ` node 文件名.js `
> 2. 读/写文件(fs)
> 3. 搭建web服务
2.3 客户端渲染与服务端渲染
2.3.1 什么是客户端渲染和服务端(SSR )?
两者本质的区别在于究竟谁来完成html的拼接工作,如果是在服务器端完成的,然后返回给客户端,就是服务器端渲染,而如果是前端做了更多的工作完成了html的拼接,则就是客户端渲染。
2.3.2 优点和缺点
服务端渲染优点:
1. 浏览器打开页面耗时少。因为后端已经拼接完html和数据,浏览器直接解析dom就行。
2. 有利于SEO的优化。
3. 后台生成静态文件,对于那些数据变化少的页面来说,可以生成缓存片段,这样就减少了数据库查询时间和渲染时间,直接从缓存获取即可。
服务端渲染缺点:
1.不利于前后端分离,开发效率慢。
2. 占用服务器资源增多;
客户端渲染优点:
1. 前后端分离,开发效率加快,前端只专注于ui的设计,后端只专注于后端的业务逻辑开发。
2. 用户体验加强,可以做成spa,无刷新获取数据$ajax
客户端渲染缺点:
1. 前端页面渲染时间较长,需要先请求数据再加载页面。
2. 不利于SEO
> <p style="color:red">总结: 现在的页面都是交叉做的,对于重要信息可以服务端渲染出来,对于不重要的可以通过js 获取数据渲染 </p>
2.4 node 核心模块
fs(文件系统)
异步地读取文件的全部内容。
fs.readFile(‘文件路径‘,function(err,data)
if(err) throw err;
console.log(data)
);
异步地写入文件
fs.writeFile(‘文件路径‘,‘node 学习‘,‘utf8‘,function(err,data)
);
异步的复制文件
fs.copyFile(‘源文件.txt‘, ‘目标文件.txt‘, (err) =>
if (err) throw err;
console.log(‘源文件已拷贝到目标文件‘);
);
path(路径)
返回当前文件的文件名
path.basename(‘/url/index.html‘) // 返回 index.html
path.basename(‘/url/index.html‘,‘.html‘) //返回 index
返回当前文件所在的目录
path.dirname(‘/url/index/script.js‘) //返回 /url/index
返回当前文件的扩展名
path.extname(‘/url/index/script.js‘) //返回 .js
将字符串拼接起来 返回文件目录 路径
path.join(‘foo‘,‘index‘,‘sdfk/sine‘,‘aske‘,‘..‘) //返回 foo/index/sdfk/sine
返回一个对象root,dir,base,ext,name
path.parse(‘/home/user/dir/file.txt‘) //返回 root:‘/‘,dir:‘/home/user/dir‘,base:‘file.txt‘,ext:‘.txt‘,name:‘file‘
将路径或路径片段的序列解析为绝对路径
path.resolve(‘/a‘,‘./b‘,‘c‘) //返回 /a/b/c
module(模块)
exports 和 module.exports (暴露)
exports.f = function()
module.exports = function()
> * __http(服务)__
创建服务器
http.creatServer(function(req,res)) //返回http.server 实例
.listen(3000,function()
console.log(‘开启服务‘)
)
响应api
res.statusCode = ‘404‘ // 发送状态码
res.setHeader(‘content-type‘,‘text/plain‘) //设置请求头
res.write(‘发送的客户端的内容‘,‘utf8‘,function(err,data)
) // 响应数据
res.end() //结束响应
简单案例
//第一步加载核心模块 http
var http = require(‘http‘)
//第二步 创建http服务
var server = http.createServer();
//第三步 监听请求的api
server.on(‘request‘,function(req,res)
var url = req.url; // 获取请求的路径 /
res.setHeader(‘content-type‘,‘text/html;charset=utf-8‘)
//路由设计
if(url == ‘/login‘)
res.end(‘登录页‘)
else if(url == ‘/register‘)
res.end(‘注册页‘)
else
res.end(‘404页面‘)
)
// 第四步 监听路径 端口号
server.listen(3000,function()
console.log(‘服务已启动‘)
)
2.5 异步编程
注 : 要有异步编程的思想
-
回调函数
概念:回调函数就是传递一个参数化的函数,就是将这个函数作为一个参数传到另一个主函数里面,当那一个主函数执行完之后,再执行传进去的作为参数的函数。走这个过程的参数化的函数 就叫做回调函数。换个说法也就是被作为参数传递到另一个函数(主函数)的那个函数就叫做 回调函数。
例子:
f1() // f1 是一个很耗时的函数 f2() //重新更改f1的代码 加一些异步操作 function f1(callback) setTimeout(function() callback() ,1000); //下面是执行f1之前的代码 f1(f2)
应用场景
解决一些异步操作,例如从一个异步中拿到数据。
- function f1(callback)
- setTimeout(()=>
- for( i = 0; i < 10; i++)
- callback(i)
-
- ,1000)
-
-
- f1(function(data)
- console.log(data)
- )
promise
2.6 封装
概念:所谓封装,就是把相同的代码抽离出来封装成一个盒子(类);
特性:可复用,可维护,代码逻辑简洁明了
node里面独立模块(包含封装的概念)
所谓模块化,也是独立文件,职责比较单一,有点像是各司其职,各司其责的概念;
任何代码业务逻辑,必定少不了封装,你是一个资深工程师,必定少不了封装
3. express
概念:Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功。(把原生的http服务给封装了一下同时又扩展很多功能)
安装:
`$ npm install express --save`
- //引入核心模块
- var express = require(‘express‘)
- // 创建服务
- var server = express()
- //监听路由
- server.get(‘/login‘,function(req,res)
- req.query
- )
- // 监听端口
- server.listen(8000,function()
- console.log(‘开启服务‘)
- )
3.1所包含的几个核心概念
监听路由的方法
- get post put delete all
匹配路径的方式
- // 字符串、正则 ,字符?,+,*,和() 按正则表达式处理
- // /ab?cd /ab+cd /ab*cd /a/
- app.get(‘/about‘, function (req, res)
- res.send(‘about‘)
- )
3.响应的方法
- //res下表中响应对象()的方法可以向客户端发送响应,并终止请求 - 响应周期。如果没有从路由处理程序调用这些方法,则客户端请求将保持挂起状态。
- res.end() //结束响应
- res.json() //发送json 数据
- res.jsonp() //使用jsonp支持发送json格式
- res.redirect() //重定向
- res.render() //渲染视图模板
- res.send() //发送各种类型的数据
- res.sendFile()//发送文件
- res.sendStatus(404) // 发送状态码
- res.sendStatus(200); // equivalent to res.status(200).send(‘OK‘)
- res.sendStatus(403); // equivalent to res.status(403).send(‘Forbidden‘)
- res.sendStatus(404); // equivalent to res.status(404).send(‘Not Found‘)
- res.sendStatus(500); // equivalent to res.status(500).send(‘Internal Server Error‘)
- res.set() // 设置请求头
- res.status(404) // 设置响应的HTTP状态
- res.type()//将Content-TypeHTTP标头设置为由mime.lookup()为指定的MIME类型确定的MIME类型 type。如果type包含“/”字符,则将其设置Content-Type为type。
- res.type(‘.html‘); // => ‘text/html‘
- res.type(‘html‘); // => ‘text/html‘
- res.type(‘json‘); // => ‘application/json‘
- res.type(‘application/json‘); // => ‘application/json‘
- res.type(‘png‘); // => image/png:
路由设计
- var router = express.router()
- router.all(‘/‘,function(req,res) ) // get put delete post
使用模板引擎
- app.set(‘views‘, __dirname + ‘/views‘);// 设置视图模板文件夹
- app.set(‘view engine‘, ‘jade‘);
- app.set(‘view engine‘, ‘pug‘) //给express 设置对应模板引擎
- app.engine(‘art‘, require(‘express-art-template‘));
使用静态资源
- app.use( express.static(__dirname + ‘/static‘)); // 访问的是根目录 ‘/’
- app.use(‘/‘, express.static(__dirname + ‘/static‘));
- app.use(‘/public‘, express.static(__dirname + ‘/public‘));
案例
- var express = require(‘express‘)
- var path = require(‘path‘)
-
- var app = express()
-
- app.use(‘/public‘, express.static(path.join(__dirname, ‘public‘)))
- app.use(‘/node_modules‘, express.static(path.join(__dirname, ‘node_modules‘)))
-
- app.engine(‘html‘, require(‘express-art-template‘))
- app.set(‘views‘, path.join(__dirname, ‘./views‘))
-
- app.get(‘/‘, function (req, res)
- res.render(‘index.html‘)
- )
-
- app.listen(3000, function ()
- console.log(‘running...‘)
- )
以上是关于node基础应用的主要内容,如果未能解决你的问题,请参考以下文章