前言
选用Node.js,Express,MongoDB来实现一个学生信息的增删改查。
- 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
自动监视文件的变化,一旦文件变化,自启动服务器。
npm install nodemon -g // 全局安装
nodemon app.js // 使用nodemon开启服务器
总结
学习了Node.js后,用这个较为简单的任务来测试一下自己的学习情况。这个项目已经实现一两周了,当时没能尽快的写下来,现在也废话少说,直接上代码了。
学习Node.js后,发现Node.js越来越有趣了。