21
1- nodejs 中有哪些常用的内置模块:
1)url模块
将请求字符串转换为对象
// let obj=url.parse(str);//将请求字符串转换为对象
// let obj=url.parse(str,true);//参数二为true ,将查询字符串转换为对象
// console.log(obj.protocol);//协议
// console.log(obj.hostname);//主机名
// console.log(obj.port);//端口号
// console.log(obj.pathname);//资源路径
// console.log(obj.query);//查询字符串
let {username,pwd}=url.parse(str,true).query;
// console.log(obj);
console.log(username,pwd);
2)querystring
将查询字符串---->对象
//查询字符串
// let str='uername=jack&pwd=123';
// let obj=qs.parse(str);
3)path
Join() 地址拼接
extname() 获取文件的后缀名
basename() 获取地址最后一个文件的名称
dirname() 上级目录地址
isAbsolute() 判断是否是绝对路径 true false
resolve() 将相对路径转换为绝对路径
静态资源:
路由配置后,客户端虽然可以访问不同的页面;但是页面里面的外部链接仍然无效,比如:link的外部css,script的src链接,image的src链接等都是无效的。
为什么这些资源是无效的?
我们一定不要认为,客户端请求了html或页面后,页面里面的外部链接就会自动请求得到;实际是,我们请求到html或页面后,浏览器在解析这个页面的过程中遇到外部链接,还会继续向服务器发请求,那么服务器就需要对这些请求进行处理(比如css,js,image等请求连接);这个处理的过程我们就可以认为是在处理静态资源。
静态资源的处理,其实和路由的配置非常相似,只不过静态资源都有指定的目录和特殊的后缀,简单处理如下:
let ext = path.extname(req.url); //获取请求路径的后缀
let basename = path.basename(req.url); //获取路径中文件的名称
switch (ext) {
case ".css":
buf = fs.readFileSync(`./public/css/${basename}`);
break;
case ".js":
buf = fs.readFileSync(`./public/js/${basename}`);
break;
case ".jpg":
case ".png":
case ".gif":
case ".bmp":
buf = fs.readFileSync(`./public/image/${basename}`);
break;
}
网站开发模式
网站的开发方式,目前来看主要有两种
a)服务端渲染(SSR server-side rendering)
i.服务端渲染的内容不是静态页(.html),而是模板页(.php,.jsp,vue 使用模板语法进行页面渲染,把动态数据解析为静态的html)
ii.数据来源是服务端
b)前后端分离
i.前台负责写html静态页,使用ajax请求来渲染上面的数据
ii.后台负责提供接口
注意:如果是前端端分离,则src,href,action等链接,一定要写全地址,比如http://localhost:3000/css/index.css。
如果是服务端渲染,则src,href,actions等链接,需要写路由配置的配置项,比如:/about,/list等。
————————————————
版权声明:本文为CSDN博主「前端 小白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_49230250/article/details/107875266
2-常用的第三方模块:
1.nodemon :命令行工具,用以辅助项目开发,可以实时js文件是否改动,如果有改动,自动重新编译运行 (npm install nodemon)
2.nrm : 下载地址切换工具
使用步骤:npm install nrm -g
nrm ls
nrm use 下载地址名称
3.Gulp : 基于node开发的前端构建工具
使用步骤:npm install gulp
在项目根目录下建立gulpfile.js文件
重构项目的文件夹结构,src目录存放源代码文件,dist目录放置构建后文件
在gulpfile.js文件中编写任务
gulp中提供的一些方法:gulp.src()获取任务要处理的文件 ,gulp.dest()输出文件 ,gulp.task()建立gulp任务,gulp.watch()监控文件的变化
安装gulp命令行工具:npm install gulp-cli -g
gulp的一些常用插件:gulp-htmlmin(html文件压缩),gulp-file-include(公共文件包含),gulp-csso(压缩css),gulp-less(less语法转换),gulp-babel(JavaScript语法转换),gulp-uglify(压缩混淆JavaScript)
3- 如何创建一个服务器:
1 // 加载模块 2 const http = require('http') 3 // 创建服务器 4 const app = http.createServer(); 5 // 加载querstring模块,解决post请求参数 6 const querstring = require('querystring') 7 // 监听请求 8 9 app.on('request', (req, res) => { 10 res.writeHead(200, { 11 'content-Type': 'text/html; charset=utf-8' 12 }); 13 // 接受请求参数 14 // console.log(req.method) //post 15 /* 16 post请求通过data和end两个事件接收请求参数 17 18 post请求参数不是一次接收完成的 19 data: 当请求参数传递会触发data事件 20 end : 数据传递完成时触发end事件 21 */ 22 23 // 定义变量接收参数 24 var postParams = '' 25 req.on('data', (params) => { 26 postParams += params 27 }) 28 req.on('end', () => { 29 // console.log(postParams) 30 // 处理字符串 31 // querstring 解析post请求的字符串 32 console.log(querstring.parse(postParams).username) 33 console.log(querstring.parse(postParams).password) 34 }) 35 res.end('请求结束') 36 }) 37 38 // 监听端口 39 app.listen(3000, () => { 40 console.log('服务器运行在3000端口') 41 })
4-http 搭建的服务相应给客户端的数据如果是中文,应该如何处理:
处理响应报文:
1 app.on('/',(req,res)=>{ 2 res.writeHead(200,{ 3 'content-type':'text/html;charset=utf8' 4 }) 5 })
5- 第三方 router 模块和 serve-static 如何使用,作用是什么?
1 //1.router 2 //其功能是实现路由 3 //使用方法: 4 5 //获取路由对象 6 //调用路由对象创建路由 7 //启动路由 8 //使用代码: 9 10 const getRouter = require('router') 11 const router = getRouter(); 12 router.get('/index', (req, res) => { 13 res.end('Hello World!') 14 }) 15 server.on('request', (req, res) => { 16 router(req, res, () => {}) 17 }) 18 //2.sever-static 19 //其主要功能是实现静态资源的访问 20 //使用方法: 21 22 //引入serve-static模块获取创建静态资源服务功能的方法 23 //调用方法创建静态资源服务并指定静态资源服务目录 24 //启用静态资源服务功能 25 //使用代码如下: 26 27 const serveStatic = require('serve-static') 28 const serve = serveStatic('public'); // public为静态文件目录地址 29 server.on('request', () => { 30 serve(req, res) 31 })
浙公网安备 33010602011771号