nodejs入门学习总结

1,如何创建一个最简单的服务器?**

原生:

// 1. 导入 http 模块
const http = require('http')
// 2. 创建 web 服务器实例
const server = http.createServer()
// 3. 为服务器实例绑定 request 事件,监听客户端的请求
server.on('request', function (req, res) {
  console.log('Someone visit our web server.')
})
// 4. 启动服务器
server.listen(8080, function () {  
  console.log('server running at http://127.0.0.1:8080')
})

这样我们就可以用本机在浏览器通过http://127.0.0.1:8080 地址进行访问服务器了;

通过 express模块:

// 1. 导入 express
const express = require('express')
// 2. 创建 web 服务器
const app = express()
// 4. 监听客户端的 GET 和 POST 请求,并向客户端响应具体的内容
app.get('/user', (req, res) => {
  // 调用 express 提供的 res.send() 方法,向客户端响应一个 JSON 对象
  res.send({ name: 'zs', age: 20, gender: '男' })
})
// 3. 启动 web 服务器
app.listen(80, () => {
  console.log('express server running at http://127.0.0.1')
})

通过 服务器实例app可以使用.get监听客户端的get请求行为,使用.post来监听客户端的post请求行为;
通过res.send()方法可以向客户端响应内容,注意,返回的对象格式的数据达到服务器时为json格式;

通过 第三方模块 express可以更简单的创建一个服务器,这样,本机访问http://127.0.0.1地址是就会得到服务器的返回信息:{ name: ‘zs’, age: 20, gender: ‘男’ };

2,nodejs中的模块,如何将模块中的方法供外界使用?

通过require()方法可以导入模块,包括内置模块http,path,fs自定义模块(用户根据需求,自己写的模块)和第三方模块(别人写好的可以处理不同问题的模块), 在nodejs中第三方模块又叫做包
通过导入这些包我们可以实现快速开发;

⚫ 内置模块(内置模块是由 Node.js 官方提供的,例如 fs、path、http 等)
⚫ 自定义模块(用户创建的每个 .js 文件,都是自定义模块)
⚫ 第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载)

在nodejs中,每一个模块都有一个独立的作用域,作用域外无法访问作用域内的内容;其好处是防止了全局变量污染的问题;

那么模块内封装的方法如何供外界使用呢?
每一个.js自营一模块中都有一个moudle对象,里面的exports对象中存储了外界可以使用的成员,
所以,我们可以通过module,exports={ 成员},将方法暴露出去,其他的js文件通过require导入该模块就可以使用这个成员的方法了;
举例:

module.exports = {
  nickname: '小黑',
  sayHi() {
    console.log('Hi!')
  }
}

这样就将nickname这个变量,和sayhi这个方法暴露出去了;
在这里插入图片描述
可知 m中就包含了小黑,和sayhi这个方法,m.sayhi就可以直接调用;

3,什么是路由?

从广义上来讲,路由就是映射关系;
在 Express 中,路由指的是客户端的请求与服务器处理函数之间的映射关系。
Express 中的路由分 3 部分组成,分别是请求的类型、请求的 URL 地址、处理函数,格式如下:

app.method(path,handler)

当请求类型和请求地址可以匹配的时候,就会触发对应的事件处理函数;
举例;

// 挂载路由
//post 请求
app.get('/', (req, res) => {
  res.send('hello world.')
})
//get请求
app.post('/', (req, res) => {
  res.send('Post Request.')
})

4,单一模块化路由

为了使达到功能更加单一以及方便后期维护的目的,常常进行模块化;把不同功能的代码分开,例如;一个js文件只做服务器的启动;,另一个js文件仅挂载路由,不同的事件处理函数再使用不同的js文件来处理,这样我们在修改的时候,只修改单一的代码就可以了;

4.1 服务器启动

const express = require('express')
const app = express();

//app.use() 用来注册全局中间件
// '/api'为访问前缀
app.use('/api', require('./router/user'))
app.use('/home', require('./router/home'))
app.use('/admin', require('./router/admin'))

app.listen(3000, () => {
    console.log('http://127.0.0.1:3000')
});

//这个页面只做服务器的启动

4.2 挂载路由(仅admin模块):


//admin模块
// 路由模块

//1导入express
var express = require('express')

//2创建路由对象
var router = express.Router()

//3挂载具体路由
router.get('/list', require('../controller/admin'))

//4向外导出路由
module.exports = router


//这个界面做 路由的挂载

4.3: 具体业务逻辑处理函数:
在这里插入图片描述

//admin.js
module.exports = (req, res) => {
    res.send('admin page')
}
//home.js
module.exports = (req, res) => {
    res.send('home page')
}
//add.js
module.exports = (req, res) => {
    res.send('add new  user ')
}
//list.js
module.exports = (req, res) => {
    res.send('get user list')
}
//业务逻辑的处理

这样一来,如果我们想修改添加信息界,仅仅需要修改add.js中的文件就可以了,不需要更改其他的东西;方便了许多;

5,中间件

中间件(Middleware ),特指业务流程的中间处理环节。
express中间键的调用流程:
当一个请求到达 Express 的服务器之后,可以连续调用多个中间件,从而对这次请求进行预处理;
express的中间件本质上是一个function处理函数:格式为

app.use((req, res, next) => {
    console.log('第一个中间件');
    next();
})

使用中间件后,必须调用next函数,将流转关系转交给下一个中间件或者 函数
举例:

const express = require('express')
const app = express();

let flag = false

app.use((req, res, next) => {
    if (flag) {
        res.send('正在维护')
    } else {
        console.log('第一个中间件');
        next();
    }
})
app.get('/', (req, res) => {
    res.send('Home')
})

app.listen(3000)
console.log('http://127.0.0.1:3000');

当我们不想让客户端访问页面的时候,可以将flag的值设置为 true,这样客户端就不会访问到Home’页面,而是获取到中间件返回的"正在维护",反之,设置为false就可以正常访问页面;

中间件就是把用户的请求进行一次预处理;
注意:使用app.use注册的中间件所有的后续程序都要先经过这个中间件,当你想要给某个路由单独注册中间件时,可以以这种方式:

app.get('/user', mw1, (req, res) => {
    console.log('这是路由');
    res.send("User page.")
})

mw1为中间件,这样只有用户访问/user这个地址时,这个中间件才会生效;

待续`````````````

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值