5.24 node在linux环境下的安装,node原生http模块,MongoDB安装与基本使用,Mongoose分页查询,vue-infinite-scroll底部刷新,Mongoose后端语法

1、node在linux环境下的安装
方案一:直接拉淘宝的node包进行解压安装,没试过。
在这里插入图片描述
方案二:通过安装NVM,直接一键安装,见4.23书城node安装 。

2、node自带许多模块,其中核心是http模块

let http = require('http')
let url = require('url')
let util = require('util')

let server = http.createServer((req, res) => {
  res.statusCode =  200

  res.setHeader('Content-Type', 'text/plain; charset=utf-8')

  console.log("url:" + req.url) // 仅返回地址字符串

  console.log("parse:" + url.parse(req.url)) // [Object],不利于阅读

  console.log("inspect:" + util.inspect(url.parse(req.url))) // 将对象展开成字符串,方便阅读

  res.end(util.inspect(url.parse(req.url))) // 在浏览器端显示文本
})

server.listen(3000, '127.0.0.1', () => {
  console.log("Listening at http://127.0.0.1:3000...")
})

运行 node Demo.js,浏览器输入localhost:3000 回车,得到以下console.log
在这里插入图片描述
其中引申出
data.toString() // 可将buffer对象转成字符串或者html文档
JSON.parse(data) // 可将 数据 转成json对象

3、MongoDB命令行 shell脚本中执行语句

MongoDB 创建 Database 和 Collection

shell 运行 mongo
在这里插入图片描述

启动完毕后 shell 窗口不要关闭,另开一个窗口。

在这里插入图片描述

开机自启动(服务)
  • 以管理员身份运行 shell
PS E:\MongoDB\bin> ./mongod --install --serviceName MongoDB --serviceDisplayName MongoDB --logpath E:\MongoDB\data\log\mongodb.log --dbpath E:\MongoDB\data\db
  • 开启服务 MongoDB 即可

就会与 mongo 连接, 基本操作如下:

查看当前所在的数据库

db

创建数据库+创建集合
在这里插入图片描述
删除数据库(先use才能删除)
在这里插入图片描述
删除集合
在这里插入图片描述
删除集合中的数据
在这里插入图片描述
查询集合条目
show collections

查询集合,注: db.user.find().pretty() 是格式化集合
在这里插入图片描述
查询第一条数据
在这里插入图片描述
查询某一条数据(field)
在这里插入图片描述
查询某列(element),直接输1是显示全部列内容。
在这里插入图片描述

条件查询(大于$gt,小于$lt,等于$eq)
在这里插入图片描述
更新集合 (中间是逗号)
在这里插入图片描述
更新集合之清空某字段
在这里插入图片描述
shells行,import数据,入集合(开启服务后,需另起cmd到bin目录下)
在这里插入图片描述

mongoose 创建 Schema 模型如下:
在这里插入图片描述

4、mongoose是专为nodeJs应运而生的,非常便捷。分页代码如下:

router.get('/', function (req, res, next) {
  // req是get请求,直接params取参或者query对象取参,| 0 是字符串取整
  const page = req.param('page') | 0
  const pageSize = req.param('pageSize') | 0
  const sort = req.param('sort') | 0
  const skip = (page - 1) * pageSize | 0 // 第几页则跳过x条数据

  const params = {} // 默认为空
  // .find查询所有数据,.skip默认跳过几条数据。并获取pageSize条
  const goodsModel = Goods.find(params).skip(skip).limit(pageSize)
  // 链式调用.sort排序,sort 1升序 -1降序
  goodsModel.sort({'salePrice': sort})
  // 非普通find查询,已经过步骤,所以需要exec进行结果返回
  goodsModel.exec(function (err, doc) {
    if (err) {
      res.json({
        status: 1,
        msg: err.message
      })
    } else {
      res.json({
        status: 0,
        msg: 'success',
        result: {
          count: doc.length,
          list: doc
        }
      })
    }
  })
})

以上是express建立一级路由/goods下的二级根路由/,返回结果。
在这里插入图片描述

5、vue-infinite-scroll 可以实现简单的底部刷新功能。
具体用法就是检测,绑定的div距离视口底部的偏移来回调一个函数。

// 模板中
<div v-infinite-scroll="loadMore"
     infinite-scroll-disabled="busy"
     infinite-scroll-distance="20">加载中...</div>
 // methods中
 loadMore () {
	// 此处是ajax的分页功能,page++
	// 将请求到额第++页数据和前一个数据组合arr.concat(newArr)。
}

6、mongoose在nodejs的环境下的用法。

// goods.js 模块导出文件中
const express = require('express')
const router = express.Router()
const mongoose = require('mongoose')
const Goods = require('../models/goods')

// 连接mongodb数据库
mongoose.connect('mongodb://127.0.0.1:27017/dumall', {
  useNewUrlParser: true
})

mongoose.connection.on("connected", function () {
  console.log('MongoDB connected success.')
})

mongoose.connection.on("error", () => {
  console.log('MongoDB connected fail.')
})

mongoose.connection.on("disconnected", () => {
  console.log("MongoDB connected disconnected.")
})

router.get('/', function (req, res, next) {
  // req是get请求,直接param拿参,| 0 是字符串取整
  const page = req.query.page | 0
  const pageSize = req.query.pageSize | 0
  const sort = req.query.sort | 0
  const skip = (page - 1) * pageSize | 0 // 第几页则跳过x条数据
  const priceLevel = req.query.priceLevel // 价格过滤等级,字符串

  let params = {} // 默认为空

  switch (priceLevel) {
    case '0': priceGt = 0; priceLt = 100; break
    case '1': priceGt = 100; priceLt = 500; break
    case '2': priceGt = 500; priceLt = 1000; break
    case '3': priceGt = 1000; priceLt = 5000; break
    case 'all': break
  }
  // 判断是否有等级
  if (priceLevel !== 'all') {
    params = {
      salePrice: {
        $gt: priceGt,
        $lt: priceLt
      }
    }
  }

  // .find查询所有数据,.skip默认跳过几条数据。并获取pageSize条
  const goodsModel = Goods.find(params).skip(skip).limit(pageSize)
  // 链式调用.sort排序,sort 1升序 -1降序
  goodsModel.sort({'salePrice': sort})
  // 非普通find查询,已经过步骤,所以需要exec进行结果返回
  goodsModel.exec(function (err, doc) {
    if (err) {
      res.json({
        status: 1,
        msg: err.message
      })
    } else {
      res.json({
        status: 0,
        msg: 'success',
        result: {
          count: doc.length,
          list: doc
        }
      })
    }
  })
})

module.exports = router

主要是mongoose.connect()方法,exec执行回调方法,对集合排序方法sort(),以及find({})查询对象方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值