本文共 5016 字,大约阅读时间需要 16 分钟。
第一部分:原生node搭建服务器
index.jsconst http = require('http')const path = require('path')class Server { constructor () { this.server = http.createServer() // 创建服务器 this.reqEvent = { } this.server.on('request', (req, res) => { const pathObj = path.parse(req.url) if (pathObj.dir in this.reqEvent) { res.writeHead(200, { 'Content-Type': 'application/json' }) this.reqEvent[pathObj.dir](req, res) } else { res.writeHead(404, { 'Content-Type': 'text/plain; charset=UTF-8' }) res.end('404') } }) } on (url, fn) { this.reqEvent[url] = fn } run (port, callBack) { this.server.listen(port, callBack) }}module.exports = Server
login.js
const Server = require('./index.js')const path = require('path')const qs = require('querystring')const serve = new Server()serve.run(3000, () => { console.log('开启')}) // 监听开启const success = (res, data) => { const resultObject = { code: 200, data: data || null } const resultJSON = JSON.stringify(resultObject) res.end(resultJSON)}const fail = (res, data) => { res.writeHead(404, { 'Content-Type': 'application/json' }) const resultObject = { code: 404, data: data || null } const resultJSON = JSON.stringify(resultObject) res.end(resultJSON)}serve.on('/', (req, res) => { const urlBase = path.parse(req.url) const urlBaseArr = urlBase.base.split('?') let paramsObj if (urlBaseArr[1]) paramsObj = qs.parse(urlBaseArr[1]) if (urlBaseArr[0] === 'login') { if (('username' in paramsObj) && ('password' in paramsObj)) { success(res, { msg: '登录成功'}) } } else { fail(res, { msg: '请求路径不正确'}) }})
第二部分:express框架搭建服务器
const express = require('express')const app = express() // 创建app服务对象app.use((req, res, next) => { console.log('我是请求拦截器,所有的请求都会先经过我这里') next() // 放行})app.get('/', (req, res) => { res.send('返回的内容')})app.post('/login', (req, res) => { res.send('精确匹配,返回的内容')})app.listen(300, (err) => { if (!err) console.log('服务器启动成功') else console.log(err)})
第三部分:数据库部分(mongodb)
通过mongoose进行增删改查 通过MongoDB Compass进行可视化1、index.js
/* 下载mongoose yarn add mongoose *///引入const mongoose = require("mongoose");const db = mongoose.connection;//连接数据库mongoose.connect("mongodb://localhost:27017/local" , { useUnifiedTopology: true})//监听事件db.once("open",function(){ console.log("数据库连接成功~~~");})db.once("close",function(){ console.log("数据库连接已经断开~~~");})//断开数据库连接,一般不调用//mongoose.disconnect();// 定义文档数据类型const Schema = mongoose.Schemaconst schema = new Schema({ name: String, age: { type: Number, default: 3 }})// 选择const connection = mongoose.createConnection('mongodb://localhost:27017/admin')//结合const StuModel = connection.model('studend', schema) // 会自动把studend集合名加上s,改为复数名// 导出exports.StuModel = StuModel
2.add.js 增
//引入require('./mongoose')const { StuModel } = require('./mongoose')// 插入第一种方法StuModel.create([ { name: '小一', age: 23 }, { name: '小二', age: 23 }], function (err) { if (!err) { console.log('插入成功') }})// 插入第二种方法const stu = new StuModel({ name: '小五', age: 23})stu.save(function(err) { if (!err) { console.log('插入成功') }}) // 此方法目前尝试只能插入一条
3.remove.js 删
// 引入require('./mongoose')const { StuModel } = require('./mongoose')// 删除第一种方法StuModel.remove({ _id: '60b75c276ad16f0c0713cd32'}, function(err) { if (!err) { console.log('删除成功') }})StuModel.deleteOne()StuModel.deleteMany()// 删除第二种方法,通过docs操作删除,先查询,再删除StuModel.findOne({ _id: '60b73f96ca65ba08bb2074de'}, function(err, docs) { if (!err && docs) { docs.remove((err) => { if (!err) { console.log('删除成功') } }) }})
4.update.js 改
// 引入require('./mongoose')const { StuModel } = require('./mongoose')// 修改第一种方法 -- 修改单个StuModel.updateOne({ _id: '60b759e7f594660b974dbfbc'}, { age: 100}, function(err) { if (!err) { console.log('修改成功') }})// 修改第一种方法 -- 修改多个StuModel.updateMany({ ... })// 修改第二种方法 -- 通过docs操作修改StuModel.findOne({ _id: '60b73b013191170884abc2b9'}, function(err, docs) { if (!err && docs) { // 第二种方法 -- 1 docs.update({ $set: { age: 200}}, function(err) { // 结合查询做修改 if (!err) { console.log('修改成功') } }) // 第二种方法 -- 2 docs.age = 300 docs.save() }})
5.find.js 查
// 引入require('./mongoose')const { StuModel } = require('./mongoose')// 第一种方法// 参1 查询的筛选条件,空对象查询所有的// 参2 筛选出对象里要的属性,不给默认所有字段// 参3 option配置参数,里面可以配置很多东西,如skip跳过前几个,limit只显示前几个StuModel.find({ name: '小蓝'}, "name", { skip: 1, limit: 1}, function(err, docs) { if (!err) { console.log(docs) // [{}, {}] }})// 第二种方法 -- 只查询一条StuModel.findOne({ }, ....)// 第三种方法 -- 根据id查询,结果是一个对象StuModel.findById("60b75c276ad16f0c0713cd32", ....)// 第四种方法 -- 只查询文档数量StuModel.count({ }, function(err, count) { if (!err) { console.log(数量, count) }})
第四部分:阿里云部署
…待定转载地址:http://ulqzi.baihongyu.com/