一个包含express+mock.js+mongoDB简单的node后端服务示例

server.js

mock用于模拟生成数据,mongoDB是数据库

const Mock = require('mockjs');
const express = require('express')
const server = express()
const bodyParser = require('body-parser')
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({ extended: false }));

const path = require('path')
// 引入数据库 mongoDB
const db = require('ykt-mongo');
const col = db.collection('novel');

// test
col.insert({name:'test',text:'NOVEL'})

//服务器所有接口跨域访问设置
server.all('*', function(req, res, next) {
	// 设置请求头为允许跨域
	res.header('Access-Control-Allow-Origin', '*');
	// 设置服务器支持的所有头信息字段
	res.header(
		'Access-Control-Allow-Headers',
		'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild, sessionToken'
	);
	// 设置服务器支持的所有跨域请求的方法
	res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
	if (req.method.toLowerCase() == 'options') {
		// res.send(200); // 让options尝试请求快速结束
		res.sendStatus(200)
	} else {
		next();
	}
});

function getData(param) {
	return Object.assign({
		code: 10000,
		msg: '操作成功',
		data: {}
	}, param);
}

// ==========================================================================
//虚拟数据
const sql_user = {
	'admin': {
		pwd: 123,
		info: {
			username: 'admin',
			name: '小明',
			sex: '男',
			//1:管理员;2:普通用户
			type: 1
		}
	},
	'ljs': {
		pwd: 3305,
		info: {
			username: 'ljs',
			name: 'wqLius',
			sex: '男',
			//1:管理员;2:普通用户
			type: 1
		}
	}
}

// ==========================================================================
//接口
//登录
server.post('/api/login', (request, responce) => {
	const { username, password } = request.body;
	const data = sql_user[username];
	if (data) {
		if (data.pwd == password) {
			responce.json(getData({ msg: '登录成功', data: data.info }))
		} else {
			responce.json(getData({
				msg: '密码错误',
				code: 10001
			}))
		}
	} else {
		responce.json(getData({
			msg: '用户名不存在',
			code: 10002
		}))
	}
})
//退出
server.get('/api/exit', (request, responce) => {
	responce.json(getData({ msg: '退出成功' }))
})

/* 学生相关*/
// {id:编号	num:学号	name:姓名	className:班级	birth:生日	phone:手机	major:专业	address:地址	score::评分}
function getStudentList(className = '计算机一班') {
	return Mock.mock({
		'page': 1,
		'count': 28,
		'list|10-100': [{
			'id|+1': 1,
			'num|+1': 1,
			'name': '@cname',
			'sex|1': ['男', '女'],
			'birth': '@date',
			//'major': '@ctitle',
			'major|1': ['计算机科学与技术','软件工程','JavaScript ES8','大数据','人工智能','软件技术',
						'汉语言文学','人力资源管理','英语','信息安全','智能医疗','生物科技'],
			'address': '@county(true)',
			'score|20-100': 1,
			phone() {
				let { num } = Mock.mock({ 'num|11111111-9999999': 1 })
				return `136${num}`;
			},
			className
		}]
	})
}
const studentList = getStudentList()
server.post('/api/student/add', (request, responce) => {
	let fields = ['num', 'name', 'className', 'birth', 'phone', 'major', 'address', 'score'];
	const dd = request.body || {};
	const { list } = studentList;
	if (fields.every(field => dd[field])) {
		dd.id = list.length + 1
		list.push(dd);
		responce.json(getData({ data: studentList }))
	} else {
		responce.json(getData({ msg: '学生信息不完整', code: 10003 }))
	}
})
server.get('/api/student/delete', (request, responce) => {
	const dd = request.query || {};
	const { list } = studentList;
	if (dd.id) {
		let idx = list.findIndex(item => item.id == dd.id);
		if (idx === undefined) {
			responce.json(getData({ msg: '找不到对应的学生', code: 10003 }))
		} else {
			list.splice(idx, 1)
			responce.json(getData({ data: studentList }))
		}
	} else {
		responce.json(getData({ msg: '学生id为必要参数', code: 10003 }))
	}
})
server.post('/api/student/edit', (request, responce) => {
	const dd = request.body || {};
	const { list } = studentList;
	if (dd.id) {
		let item = list.find(item => item.id == dd.id);
		if (item) {
			Object.assign(item, dd)
			responce.json(getData({ data: studentList }))
		} else {
			responce.json(getData({ msg: '找不到对应的学生', code: 10003 }))
		}
	} else {
		responce.json(getData({ msg: '学生id为必要参数', code: 10003 }))
	}
})
server.get('/api/student/list', (request, responce) => {
	const { field, text, page = 1 } = request.query || {};
	const { list } = studentList;

	let data = { page, count: list.length };
	let start = (page - 1) * 10;
	let end = page * 10;

	if (field && text) {
		data.list = list.filter(item => item[field].toString().includes(text)).slice(start, end)
	} else {
		data.list = studentList.list.slice(start, end)
	}
	responce.json(getData({ data }))
})

// 指定服务器运行端口8080
server.listen(8080)
console.log('Server running at http://localhost:8686')

console.log('path=',path.join(__dirname));


const App = express();		//实例化一个express
/* 通过服务端口访问页面
	设置服务资源文件位置 public
	将html文件放在 public文件夹下,
	即可使用 http://127.0.0.1:3305/index.html 访问index.html
	或 http://192.168.0.100:3305/index.html  本机在局域网中的ip
*/
 App.use(express.static("./public")).listen('3305');{
   console.log('App listening at port 3305');
   console.log('Use http://192.168.0.100:3305/index.html  to index.html');
 }





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Mock.js 生成包含随机数据的响应对象,你需要在前端的 JavaScript 代码中引入 Mock.js 库并定义模板。然后,你可以在需要随机数据的地方使用这个模板生成数据。 首先,你需要在 HTML 文件中引入 Mock.js 库。你可以从 Mock.js 官方网站下载库文件,或者使用一些在线 CDN。例如,你可以在 `<head>` 标签中添加以下代码来引入 Mock.js: ```html <script src="https://cdn.jsdelivr.net/npm/mockjs@1.1.0/dist/mock.js"></script> ``` 然后,在你的 JavaScript 代码中,使用 Mock.js 定义模板并生成随机数据。下面是一个示例: ```javascript // 使用 Mock.js 定义模板 const template = { 'name': '@cname', // 随机生成中文名字 'age|18-60': 0, // 随机生成18到60之间的整数 'email': '@email', // 随机生成邮箱 'avatar': '@image("200x200")' // 随机生成200x200的图片链接 }; // 使用模板生成随机数据 const data = Mock.mock(template); console.log(data); ``` 你可以将上述代码放在你的 JavaScript 文件中的适当位置,例如在页面加载完成后的 `DOMContentLoaded` 事件处理程序中。 注意,Mock.js一个前端库,它通过拦截 AJAX 请求来模拟后端接口返回的数据。通常情况下,你需要在前端开发环境中运行你的代码,例如在本地的开发服务器上。这样,当你发送 AJAX 请求时,Mock.js 就可以拦截请求并返回随机数据。 如果你使用的是 Vue.js、React 或 Angular 等前端框架,你可以在相应的组件中引入 Mock.js,并在开发环境中使用它来模拟数据。具体的用法可能会因框架而异,请参考相应框架的文档或示例

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值