博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nonde+MongoDB基础创建及增删改查
阅读量:3962 次
发布时间:2019-05-24

本文共 5016 字,大约阅读时间需要 16 分钟。

第一部分:原生node搭建服务器

index.js

const 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/

你可能感兴趣的文章
图文混排效果
查看>>
urllib2.urlopen超时问题
查看>>
魏兴国:深入浅出DDoS攻击防御
查看>>
使连续的参考文献能够中间用破折号连起来
查看>>
Discover Feature Engineering, How to Engineer Features and How to Get Good at It
查看>>
36辆车,6条跑道,无计时器,最少几次比赛可以选出前三
查看>>
matlab2012b与matlab7.1执行set(gca,'Yscale','log')之后画到的直方图结果居然不同
查看>>
回文题
查看>>
AJAX应用之注册用户即时检测
查看>>
File 类小结
查看>>
java除去字符串空格
查看>>
jsp 2.0标记文件
查看>>
Hibernate中Criteria的完整用法
查看>>
sql jsp
查看>>
spring beans beanfactory applicationcontext
查看>>
使用ORM工具进行数据访问
查看>>
使用ORM工具进行数据访问
查看>>
编译与部署Eclipse+Tomcat+MySQL+Liferay4.1.2
查看>>
POJ3728,The merchant(倍增LCA+分治)
查看>>
2019 ICPC Malaysia National,E. Optimal Slots(01背包变形)
查看>>