Node.js基础(二)

217 阅读3分钟

express

概念:

  • express是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。

构成

  • 中间件
    • 应用级中间件
    • 路由中间件
    • 错误处理中间件
      • 如何调用中间件?
      • app对象调用-->app.use(中间件)
  • 路由

使用工程化工具来构建一个完整的 express 项目

  • 工程化工具/自动化工具/脚手架(express-generator)
安装express-generator脚手架环境
  $ cnpm i express-generator -g 
  $ express -e 项目名称
不安装express-generator脚手架使用  
  保证你的电脑中npm版本 > 5.2 
  $ npx express -e 项目名称/.
名词解释: -e  表示ejs文件,它是一个html模板
            . 表示当前文件夹中
生成多个相关文件:bin/public/routes/views/app.js.package.json
  • 相关文件简介
    • bin:为项目创建了一个服务器
      • www
    • public:静态资源文件夹
      • img
      • style
      • is
    • routes:路由
    • views:路由对应的模板,这个模板将来会发送给前端,发给前端前会被解析为html文件
      • .ejs文件
    • app.js:项目入口文件
    • package.json:表示项目启动脚本记录 、 项目所需要的依赖包【 插件 】
  • 引入包管理工具安装包
$ cnpm i
生成node_modules文件
  • 开启服务器
在bin/www中设置开启服务器提醒:
server.listen(port,()=>{
    console.log(`服务器运行在:http://localhost:${port}`);
});
$ npm run start
    终端显示:服务器运行在...
  • express路由配置
在routes中创建接口(register.js)
//创建一个接口
const express=require('express');
const router=express.Router();

router.route('/register')//http://localhost:3000/api/register
    .post((req,res,next)=>{
        res.render('register',{//参数表示要渲染的文件名自动找views里面的ejs文件
            data:JSON.stringify({//发送的数据以字符串格式
                name:'张三',
                msg:'圣诞节快乐!'
            })
        })
    })
//暴露接口
module.exports=router;
  • 创建模块/添加模块
//创建模块
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
//接口中所用的模块
var registerRouter = require('./routes/register');

//调用模块
app.use('/', indexRouter);
app.use('/users', usersRouter);
//更改接口路径
app.use('/api', registerRouter);
  • 实时监听
在package.json文件中:
"scripts": {
    "start": "nodemon ./bin/www"
  }

数据库

概念:

  • 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库

作用:

  • 存储数据

分类

  • 关系型数据库【 SQL 】
    • 由表-->行构成
    • 代表:MySQL ...
  • 非关系型数据库【 NoSQL 】
    • 由集合-->文档构成/BSON
      • BSON:JSON的超集,比JSON多了可以存储列如 二进制 数据
    • 代表:MongoDB ...

mongoose模块

Mongoose简介

  • Mongoose库简而言之就是在node环境中操作MongoDB,将数据库中的数据转换为JavaScript对象以供使用。

Mongoose操作流程

  • 1.安装mongoose
npm install mongoose -D
cnpm i mongoose -D/-S
  • 2.连接数据库
2.1 使用mongoose连接数据库的前提条件是:
(1)mongo数据库已经运行 
(2)已经安装了mongoose包

2.2创建db文件夹-->将数据库变为自定义模块
  db/index.js-->如下操作:
//引入mongoose模块
const mongoose=require('mongoose');
//创建数据库
const run=()=>{
    //mongoose.connect(参数,回调函数)方法连接数据库
    const HOST='127.0.0.1';
    const DATA_BASE_NAME='1911';
    const dataB aseAddress=`mongodb://${HOST}:27017/${DATA_BASE_NAME}`;
    mongoose.connect(dataBaseAddress,error=>{
        if(error){
            console.log('数据库连接失败');
        }else{
            console.log('数据库连接成功');
        }
    })
}
module.exports=run;
解析:
如何获取数据库地址:databaseAddress?
在cmd中输入mongo
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2019/12/26/16f41e0facebbcc5~tplv-t2oaga2asx-image.image)

2.3在routes/register.js引入db/index.js
const run=require('../db');
运行在.post()里面.render()上面
解析:
../db-->db/index.js文件名是index所以可以省略

2.4 报错问题
当Error:'http-errors'时,说明node_modules文件出错;
解决方法:
终端执行$ rm -rf node_modules(删除)
$ cnpm i(重装node_modules)
  • 3.创建骨架schema
    • 骨架:相当于一个字段/一个表
在db/schema/index.js中:
const mongoose=require('mongoose');
const schemaHandler=(options)=>{
    return new mongoose.Schema(options)
};
const userSchema=schemaHandler({
    username:String,
    password:String
});
module.exports={
    userSchema,
};
  • 4.创建模型
    • 一个骨架对应一个模型
在db/model/index.js中:
const mongoose=require('mongoose');
const {
   userSchema,
  }=require('../schema');
const modelHandler=(collectionName,schema)=>{
   return  mongoose.model(collectionName,schema)};
const userModel=modelHandler('users',userSchema);
module.exports={
   userModel
 };