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 })

 

posted @ 2021-03-07 22:58  路~  阅读(61)  评论(0)    收藏  举报