前端全栈开发之:Node.js

Nodejs的简介 (运行Javascript编程语言的环境)

  1. 浏览器外运行v8引擎(google chrome 内核)--提高效率
  2. libuv包--异步I/O ,事件驱动模型
  3. 全局/内置模块/第三方模块 API
  4. 底层调用操作系统 windows/linux/macOS
  5. 底层代码是C++编写的。

nodejs 安装

  1. 官网地址:https://nodejs.org/zh-cn/ (安装包), http://nodejs.cn/ (api学习)
  2. mac OS 中使用Homebrew安装
  3. nvm-windows 安装

nodejs js示例

// 系统cpu信息获取
const os = require('os');
console.log(os.cpus());

nodejs 创建服务

  1. web服务
const http = require('http');
const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end('webServer');
});
server.listen(8088, '127.0.0.1', () => {
    console.log('server成功');
});
  1. 服务运行

    node server.js //server.js 自定义js文件运行
  2. 服务访问(浏览器中)

    http://127.0.0.1:8088 //浏览器中显示 webServer

自动化工具

# nodemon (server.js中数据发生变化,自动重启服务)
1. 安装 `npm install -g nodemon`
2. 检查安装成功 `nodemon -v` //2.0.4 输出版本号安装成功
3. 使用 `nodemon server.js` //cd 到js文件所在目录

常用框架

express

  1. 创建web服务
const express = require('express');
const app = express();
app.use(express.json()); //解析 application/json 数据
app.use(express.urlencoded({ extended: true })); //解析 application/x-www-form-urlencoded 数据

app.get('/kk/byks', (req, res) => {
    let { ks } = req.query;
    res.json({
        id: 1,
        value: '固态',
        ks
    });
});

app.post('/kks', (req, res, next) => {
    res.json({
        id: 1,
        value: '固态',
        kks: req.body.kks
    });
    next(new Error('错误'));
});

app.listen(8088, () => {
    console.log('okok');
});
  1. router
app.all('/kkall', (req, res) => {
    res.json({
        id: 221,
        value: '所有请求方式',
        method: req.method
    });
});

// 多用于日志
app.get('*', (req, res) => {
    res.json({
        id: 221,
        value: '所有请求uri',
        uri: req.path
    });
});
  1. 中间件(可插拔、可扩展)

结构:

  • 函数 //异常处理|业务功能处理(转交控制权next())|结束响应(路由的的处理)
  • 函数入参 // (err, req, res, next) next是个函数
  • 场景:app 级别 | router 级别
// 异常处理
function error_handler(err, req, res, next) {
    if (err) {
        res.status(500).json({
            message: '服务器异常'
        });
    }
}

// 业务处理
function params_filter(req, res, next) {
    let { name } = req.query;
    if (!name || name.length) {
        res.json({
            message: '缺少参数'
        });
    } else {
        next();
    }
}

// app 级别
function log_more(req, res, next) {
    console.log('这是个app级别的中间件');
    next();
}
app.use(log_more);

app.get('/kk', (req, res) => {
    let { mm } = req.query;
    res.json({
        id: 1,
        value: '固态',
        mm
    });
});
上一篇
下一篇