【nodejs案例】记账本功能 -- 数据库调用(二)

上次我们使用nodejs+express+lowdb制作了简单地记账本功能,此次加入数据库,学习从数据库中调取数据。使用mongoose进行数据库调用。

一、连接mongoose服务

(1)创建db文件夹,用于导入和连接mongoose服务,使用前先安装mongoose

安装  npm i mongoose

         db.js代码如下

module.exports = function(success, error) {
	//判断
	if (typeof error !== 'function') {
		error = () => {
			console.log('连接失败');
		}
	}
	//安装mongoos
	//导入mongoos
	const mongoose = require('mongoose');
	//连接mongoos服务
	const {DBHOST,DBPORT,DBNAME}=require('../config/config.js')
	mongoose.connect(`mongodb://${DBHOST}:${DBPORT}/${DBNAME}`);
	//设置回调
	mongoose.connection.once('open', () => {
		success()
	})
	mongoose.connection.on('error', () => {
		error()
	})
	mongoose.connection.on('close', () => {
		console.log('连接关闭');
	})

}

(2)创建config文件夹,用于存储连接mongoose服务的地址,便于后期修改

         config.js代码如下

module.exports={
	DBHOST:'127.0.0.1',
	DBPORT:27017,
	DBNAME:'test'
}

(3)创建models文件夹,用于存储文档模型

         accountModels.js代码如下

const mongoose = require('mongoose');
let accountSchema = new mongoose.Schema({
	title: {
		type: String,
		required: true,
	},
	time: Date,
	type:{
		type: Number,
		default:-1
	},
	money:Number,
	remark:String
});
let accountModel = mongoose.model('account', accountSchema);

module.exports = accountModel

(3)在bin文件夹www下导入db

         代码如下

#!/usr/bin/env node

//导入db
const db=require('../db/db')

db(()=>{
	/**
	 * Module dependencies.
	 */
	
	var app = require('../app');
	var debug = require('debug')('account:server');
	var http = require('http');
	
	/**
	 * Get port from environment and store in Express.
	 */
	
	var port = normalizePort(process.env.PORT || '3000');
	app.set('port', port);
	
	/**
	 * Create HTTP server.
	 */
	
	var server = http.createServer(app);
	
	/**
	 * Listen on provided port, on all network interfaces.
	 */
	
	server.listen(port);
	server.on('error', onError);
	server.on('listening', onListening);
	
	/**
	 * Normalize a port into a number, string, or false.
	 */
	
	function normalizePort(val) {
	  var port = parseInt(val, 10);
	
	  if (isNaN(port)) {
	    // named pipe
	    return val;
	  }
	
	  if (port >= 0) {
	    // port number
	    return port;
	  }
	
	  return false;
	}
	
	/**
	 * Event listener for HTTP server "error" event.
	 */
	
	function onError(error) {
	  if (error.syscall !== 'listen') {
	    throw error;
	  }
	
	  var bind = typeof port === 'string'
	    ? 'Pipe ' + port
	    : 'Port ' + port;
	
	  // handle specific listen errors with friendly messages
	  switch (error.code) {
	    case 'EACCES':
	      console.error(bind + ' requires elevated privileges');
	      process.exit(1);
	      break;
	    case 'EADDRINUSE':
	      console.error(bind + ' is already in use');
	      process.exit(1);
	      break;
	    default:
	      throw error;
	  }
	}
	
	/**
	 * Event listener for HTTP server "listening" event.
	 */
	
	function onListening() {
	  var addr = server.address();
	  var bind = typeof addr === 'string'
	    ? 'pipe ' + addr
	    : 'port ' + addr.port;
	  debug('Listening on ' + bind);
	}
	
})

二、路由规则修改

在routers文件夹下的index.js修改增加与删除功能代码

代码中加入了moment进行日期数据的处理

安装方法:npm i moment

var express = require('express');
var router = express.Router();
const moment =require('moment');
const accountModel = require('../models/accountModels');
 
// const low=require('lowdb')//导入lowdb
// const FileSync=require('lowdb/adapters/FileSync')
// const adapter=new FileSync(__dirname+'/../data/db.json')
// const db=low(adapter)
// const shortid=require('shortid')


/* GET home page. */


console.log(moment(new Date()).format('YYYY-MM-DD'));
//记账本页面(当浏览器访问account时会在views文件下寻找account.ejs文件并渲染页面)
router.post('/account', function(req, res, next) {
	// console.log(req.body);
	//插入数据库
	accountModel.create({...req.body,time:moment(req.body.time).toDate()}).then((data,err)=>{
		if(err){
			res.status(500).send('插入失败')
			return
		}
		let account=accountModel.find().sort({time:-1}).then((data1,err)=>{
			console.log(data1);
			res.render('account', { account:data1 ,moment:moment});
		});
		
	})
  
});

//添加记录
router.get('/create', function(req, res, next) {
  res.render('create', { title: 'Express' });
});

//删除记录
router.get('/account/:id',(req, res, next)=>{
	//获取id参数
	let id=req.params.id
	accountModel.deleteOne({_id:id}).then((data,err)=>{
		console.log(data);
		let account=accountModel.find().sort({time:-1}).then((data1,err)=>{
			
			res.render('account', { account:data1,moment:moment} );
	})
	
	});
})

module.exports = router;

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值