node实现基于文件管理的增删改实例

本文详细介绍了如何使用Node.js进行文件管理的增删改操作,重点探讨了模块化编程思想、异步处理以及Express路由的使用。通过自定义模块和回调函数来处理异步操作中的数据获取,强调了回调函数在处理异步结果中的关键作用。此外,还展示了如何创建路由容器并将其挂载到服务上,以实现更简洁直观的路由结构。
摘要由CSDN通过智能技术生成

要点:

       1、初步体会node基于模块化的编程思想,在node中,模块之间的互不影响,模块与模块之间只有通过module.exports(node为了减少开发人员代码,默认添加一句 var exports = module.export)才能实现数据的共享。

      2、自定义模块时,尽量做到一个模块处理一个功能,同时写的鲁棒性越强,越好。

      3、最重要的:在函数进行异步操作时,想要获取函数中的值,必须通过回调函数才能获取到。如果想要对函数中的方法的值进行操作,在回调函数中处理。在这个例子中如果回调函数发生错误直接返回错误对象,也不需要进行数据类型的转变,如果正确获取到数据,前一个参数设置为null,后一个参数是返回的数据,既可与错误的返回做区分,也可以返回数据,中间通过逗号隔开,这是现阶段第一种理解。

            另外在一种理解是,函数作为参数使用,在调用时输入了一个函数,这个函数就是需要拿到回调函数进行处理的函数,对函数相关的异步操作成功或者失败两种不同的结果,调用两次回调函数传入不同的数据,一种是错误对象,另一种是(null,data)两个参数,第一个参数返回null的错误对象。

           这里去掉过第一个参数null,程序运行失败,第二种理解的null的理解不太正确。另外,将正确的callback回调函数前添加return是正确执行的,第一种的理解应该较正确但是不透彻。

      4、为了使路由更加简洁直观,通过 express.Router()创建一个路由容器,再将路由挂载到路由容器对象上,最后通过 server.use(router)将路由容器挂载到node创建的服务上。

效果:

依赖:

{
  "name": "crub-expre",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "art-template": "^4.13.2",
    "body-parser": "^1.18.3",
    "bootstrap": "^3.3.7",
    "express": "^4.16.4",
    "express-art-template": "^1.0.1"
  }
}

node入口:

var express = require('express')
var fs = require('fs')
var bodyParser = require('body-parser')

var router = require('./router.js')
// 引入自定义的将路由模块化的包

var app = express()

app.use('/node_modules/',express.static('./node_modules/'))
// 开放固定文件夹资源,前一项参数是监听的url,是否有这段字符,后一个参数是监听对应的文件夹
app.use('/public/',express.static('./public/'))

app.engine('html',require('express-art-template'))

app.use(bodyParser.urlencoded({ extended:false }))
app.use(bodyParser.json())
// 模板引擎的配置和body-parser一定要在将路由模块挂载到服务之前


app.use(router)
// 将router容器挂载到node创建的服务器上

app.listen(3000,function(){
	console.log('succeed')
})

路由模块:

var fs = require('fs')
// 核心模块只要在所在的模块中被使用了,就需要重新引入

var express = require('express')
var Shuaiges = require('./shuaiges.js')
// 引入帅哥文件夹的操作模块

var router = express.Router()
// 创建一个express的路由容器


router.get('/',function(req,res){

	Shuaiges.find(function(err,shuaiges){
		if(err){
			return res.status(500).send('not find file')
			// 返回的状态码500,表示出错
		}
		res.render('index.html',{
			// 在express框架中,默认在views中寻找文件
			shuaiges:shuaiges
		})
	})
})
// 将路由都挂载到router容器上

router.get('/shuaiges/new',function(req,res){
	res.render('new.html')
	
})

router.post('/shuaiges/new',function(req,res){
    Shuaiges.save(req.body,function(err){
    	if(err){
    		return res.status(500).send('save fail')
    	}
    	res.redirect('/')
    	// 成功跳到首页
    })
})
router.get('/shuaiges/edit',function(req,res){
	Shuaiges.findById(parseInt(req.query.id),function(err,shuaige){
		// query中的查询字符串需要转换成数字类型,跟定义的时候相同
		if(err){
           return res.status(500).send('can not edit file')
		}
		res.render('edit.html',{
			shuaige:shuaige
		})

	})

})
router.post('/shuaiges/edit',function(req,res){

    Shuaiges.updata(req.body,function(err){
    	if(err){
    		return res.status(500).send('updata fail')
    	}
    	res.redirect('/')
    })
})

router.get('/shuaiges/delete',function(req,res){

	Shuaiges.delete(req.query.id,function(err){
		if(err){
			return res.status(500).send('delete fail')
		}
		res.redirect('/')
	})

})

module.exports = router




帅哥文件操作模块:

var fs = require('fs')
// 引入文件读取核心模块,这个自定义文件模块,封装操作shuaiges.json的方法,做到类似数据库

filePath = './shuaiDb.json'
// 这里路径就是用来存放帅哥的文件夹

e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值