添加学生信息

模板引擎练习(Node.js + MongoDB)

模块化开发
创建 students 文件夹,包含 model , public , route , views 以及app.js五个文件和 js 文件,实现模块化开发,结构如下图:

在这里插入图片描述

model 文件夹:存放数据库相关代码(connect.js + user.js)

connect.js 代码如下:

const mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => console.log('数据库连接成功'))
    .catch(() => console.log('数据库连接失败'))

user.js 代码如下:

const mongoose = require('mongoose');
 // 创建学生集合规则
const StudentSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        minlength: 2,
        maxlength: 20
    },
    age: {
        type: Number,
        min: 10,
        max: 25
    },
    sex: String,
    email: String,
    hobbies: [String],
    collage: String,
    enterDate: {
        type: Date,
        default: Date.now
    }
});

// 创建集合 返回集合构造函数
const Student = mongoose.model('Student', StudentSchema);

module.exports = Student;

public 文件夹:存放CSS格式代码(list.css + main.css)

list.css 代码如下:


body {
	padding: 0;
	margin: 0;
}

table {
	border-collapse: collapse;
}

table, td, th {
	text-align: center;
	line-height: 30px;
	border: 1px solid #CCC;
}

caption {
	font-weight: bold;
	font-size: 24px;
	margin-bottom: 10px;
}

table {
	width: 960px;
	margin: 50px auto;
}

a {
	text-decoration: none;
	color: #333;
}

a:hover {
	text-decoration: underline;
	color: #000;
}

main.css 代码如下:


body {
	margin: 0;
	padding: 0 0 40px;
	background-color: #F7F7F7;
	font-family: '微软雅黑';
}

form {
	max-width: 640px;
	width: 100%;
	margin: 24px auto;
	font-size: 28px;
}

label {
	display: block;
	margin: 10px 10px 15px;
	font-size: 24px;
}

.normal {
	display: block;
	width: 100%;
	height: 40px;
	font-size: 22px;
	margin-top: 10px;
	padding: 6px 10px;
	color: #333;
	border: 1px solid #CCC;
	box-sizing: border-box;
}

.btn {
	margin-top: 30px;
}

.btn input {
	color: #FFF;
	background-color: green;
	border: 0 none;
	outline: none;
	cursor: pointer;
}

input[type="file"] {
	/*opacity: 0;*/
	width: 120px;
	position: absolute;
	right: 0;
	z-index: 9;
}

.import {
	height: 40px;
	position: relative;
}

route 文件夹:存放路由代码(index.js)

index.js 代码如下:

// 引入router模块
const getRouter = require('router');
// 获取路由对象
const router = getRouter();
// 学生信息集合
const Student = require('../model/user');
// 引入模板引擎
const template = require('art-template');
// 引入querystring模块
const querystring = require('querystring');
const { model } = require('mongoose');

// 呈递学生档案信息页面
router.get('/add', (req, res) => {
    let html = template('index.art', {});
    res.end(html);
});

// 呈递学生档案信息列表页面
router.get('/list', async (req, res) => {
    // 查询学生信息
    let students = await Student.find();
    let html = template('list.art', {
        students: students
    });
    res.end(html);
});

// 实现学生信息添加功能
router.post('/add', (req, res) => {
    // 接收post请求参数
    let formData = '';
    req.on('data', param => {
        formData += param;
    });
    req.on('end', async () => {
        await Student.create(querystring.parse(formData));
        res.writeHead(301, {
            Location: '/list'
        });
        res.end();
    });
});

module.exports = router;

views 文件夹:存放模板引擎代码(index.art + list.art)

index.art 代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
	<title>学生档案</title>
	<link rel="stylesheet" href="./css/main.css">
</head>
<body>
	<form action="/add" method="post">
		<fieldset>
			<legend>学生档案</legend>
			<label>
				姓名: <input class="normal" type="text" autofocus placeholder="请输入姓名" name = "name">
			</label>
			<label>
				年龄: <input class="normal"  type="text" placeholder="请输入年龄" name = "age">
			</label>
			<label>
				性别: 
				<input type="radio" value="0" name = "sex"> 男
				<input type="radio" value="1" name = "sex"> 女
			</label>
			<label>
				邮箱地址: <input class="normal" type="text" placeholder="请输入邮箱地址" name = "email">
			</label>
			<label>
				爱好: 
				<input type="checkbox" value="敲代码" name = "hobbies"> 敲代码
				<input type="checkbox" value="打篮球" name = "hobbies"> 打篮球
				<input type="checkbox" value="睡觉" name = "hobbies"> 睡觉
			</label>
			<label>
				所属学院: 
				<select class="normal" name = "collage">
					<option value="前端与移动开发">前端与移动开发</option>
					<option value="PHP">PHP</option>
					<option value="JAVA">JAVA</option>
					<option value="Android">Android</option>
					<option value="IOS">IOS</option>
					<option value="UI设计">UI设计</option>
					<option value="C++">C++</option>
				</select>
			</label>
			<label>
				入学日期: <input type="date" class="normal" name = "enterDate">
			</label>
			<label class="btn">
				<input type="submit" value="提交" class="normal">
			</label>
		</fieldset>
	</form>
</body>
</html>

list.art 代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<title>学员信息</title>
	<link rel="stylesheet" href="./css/list.css">
</head>

<body>
	<table>
		<caption>学员信息</caption>
		<tr>
			<th>姓名</th>
			<th>年龄</th>
			<th>性别</th>
			<th>邮箱地址</th>
			<th>爱好</th>
			<th>所属学院</th>
			<th>入学时间</th>
		</tr>
		{{each students}}
		<tr>
			<th>{{$value.name}}</th>
			<th>{{$value.age}}</th>
			<th>{{$value.sex == '0' ? '男' : '女'}}</th>
			<th>{{$value.email}}</th>
			<th>
				{{each $value.hobbies}}
					<span>{{$value}} </span>
				{{/each}}
			</th>
			<th>{{$value.collage}}</th>
			<th>{{dateformat($value.enterDate, 'yyyy-mm-dd')}}</th>
		</tr>
		{{/each}}

	</table>
</body>

</html>

app.js 代码如下:

// 引入http模块
const http = require('http');
// 引入模板引擎
const template = require('art-template');
// 引入path模块
const path = require('path');
// 引入静态资源访问模块
const serveStatic = require('serve-static');
// 引入处理日期的第三方模块
const dateformat = require('dateformat');

const router = require('./route/index');
// 实现静态资源服务
const serve = serveStatic(path.join(__dirname, 'public'));

// 配置模板的根目录
template.defaults.root = path.join(__dirname, 'views');
// 处理日期格式
template.defaults.imports.dateformat = dateformat;

// 数据库连接
require('./model/connect')

// 创网站服务器
const app = http.createServer();
// 当客户端访问服务器端的时候
app.on('request', (req, res) => {
    // 启动路由功能
    router(req, res, () => { });
    // 启动静态资源访问服务功能
    serve(req, res, () => { });
});

// MySQL会占用80端口
app.listen(80);
console.log('服务器启动成功');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值