Node.js+Express+MongoDB 實現學生增刪改查

前言

選用Node.js,Express,MongoDB來實現一個學生信息的增刪改查。javascript

  • Express框架搭建服務器
  • art-template模板實現頁面
  • MongoDB數據庫
  • Mongoose操做數據庫

安裝

  • npm install express mongoose
  • npm install art-template express-art-template
  • npm install body-parser bootstrap jquery

文件目錄

MongoDB 數據庫

// student.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
mongoose.set('useFindAndModify', false)
mongoose.connect('mongodb://localhost/mytest', {useNewUrlParser: true})
const studentSchema = new Schema({
  username: {
    type: String,
    require: true
  },
  gender: {
    type: Number,
    enum: [0, 1],
    default: 0
  },
  age: {
    type: Number,
  },
  resume: {
    type: String
  }
})
module.exports = mongoose.model('Students', studentSchema)
複製代碼

路由

// router.js路由文件
const express = require('express')
const router = express.Router()
const Student = require('./models/student')

// 首頁展現
router.get('/', (req, res, next) => {
  Student.find( (err, students) => {
    if (err) {
      return res.status(500).send('Server error...')
    }
    res.render('index.html', {
      students: students
    })
  })
})
// 頁面跳轉
router.get('/students/new', (req, res, next) => {
  res.render('topic/new.html')
})
// 添加
router.post('/students/new', (req, res, next) => {
  new Student(req.body).save( (err, ret) => {
    if (err) {
      return res.status(500).send('Server error...')
    }
    res.redirect('/')
  })
})
// 頁面跳轉到編輯頁面
router.get('/students/edit', (req, res, next) => {
  var id = req.query.id.replace(/"/g,'')
  Student.findById(id, (err, student) => {
    if (err) {
      return res.status(500).send('Server error...')
    }
    res.render('topic/edit.html', {
      student: student
    })
  })
})
// 編輯
router.post('/students/edit', (req, res, next) => {
  var id = req.body.id.replace(/"/g, '')
  Student.findByIdAndUpdate(id, req.body, (err, ret) => {
    if (err) {
      return res.status(500).send('Server error...')
    }
    res.redirect('/')
  })
})
// 刪除
router.get('/students/delete', (req, res, next) => {
  var id = req.query.id.replace(/"/g, '')
  Student.findByIdAndDelete(id, (err, ret) => {
    if (err) {
      return res.status(500).send('Server error...')
    }
    res.redirect('/')
  })
})
// 導出接口
module.exports = router
複製代碼

入口文件

// app.js入口文件
const express = require('express')
const router = require('./router')
const bodyParser = require('body-parser')
const path = require('path')
const app = express()
const port = 5000
// 引入Nodejs自帶的child_process模塊
// 用以使用默認瀏覽器打開地址
const childProcess = require('child_process');

app.use('/node_modules', express.static(path.join(__dirname, 'node_modules')))
app.use('/public', express.static(path.join(__dirname, 'public')))
app.engine('html', require('express-art-template'))
// 配置 body-parser
app.use(bodyParser.urlencoded({extended: false}))
app.use(bodyParser.json())
app.use(router)
// 統一處理錯誤請求
app.use( (req, res, next) => {
  res.render('404.html')
})
app.listen(port, () => {
  console.log(`server runs on http://localhost:${port}`);
  // 使用默認瀏覽器打開地址
  childProcess.exec(`start http://localhost:${port}`);
})
複製代碼

實現效果

首頁

補充

能夠下載nodemon自動監視文件的變化,一旦文件變化,自啓動服務器。html

npm install nodemon -g // 全局安裝java

nodemon app.js // 使用nodemon開啓服務器node

總結

學習了Node.js後,用這個較爲簡單的任務來測試一下本身的學習狀況。這個項目已經實現一兩週了,當時沒能儘快的寫下來,如今也廢話少說,直接上代碼了。jquery

學習Node.js後,發現Node.js愈來愈有趣了。mongodb

相關文章
相關標籤/搜索