const http = require ( 'http' )
const path = require ( 'path' )
const template = require ( 'art-template' )
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. extname = '.art'
template. defaults. imports. dateformat = dateformat
require ( './model/connect.js' )
const {
parse
} = require ( 'querystring' )
const {
totalmem
} = require ( 'os' )
const {
format
} = require ( 'path' )
const app = http. createServer ( )
app. on ( 'request' , ( req, res) => {
router ( req, res, ( ) => { } )
serve ( req, res, ( ) => { } )
} )
app. listen ( 3000 )
console. log ( '服务器启动成功' )
<!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 name = " name" class = " normal" type = " text" autofocus placeholder = " 请输入姓名" />
</ label>
< label>
年龄:
< input name = " age" class = " normal" type = " text" placeholder = " 请输入年龄" />
</ label>
< label>
性别:
< input type = " radio" value = " 0" name = " sex" /> 男
< input type = " radio" value = " 1" name = " sex" /> 女
</ label>
< label>
邮箱地址:
< input name = " email" class = " normal" type = " text" placeholder = " 请输入邮箱地址" />
</ label>
< label>
爱好:
< input type = " checkbox" value = " 0" name = " hobbies" /> 敲代码
< input type = " checkbox" value = " 1" name = " hobbies" /> 打篮球
< input type = " checkbox" value = " 1" 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>
<!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>
const getRouter = require ( 'router' )
const router = getRouter ( )
const Student = require ( '../model/user' )
const template = require ( 'art-template' )
const querystring = require ( 'querystring' )
const {
model
} = require ( '../model/user' )
router. get ( '/add' , ( req, res) => {
let html = template ( 'index' , { } )
res. end ( html)
} )
router. get ( '/list' , async ( req, res) => {
let students = await Student. find ( )
console. log ( students)
let html = template ( 'list' , {
students: students,
} )
res. end ( html)
} )
router. post ( '/add' , ( req, res) => {
let formData = ''
req. on ( 'data' , ( param) => {
formData += param
} )
req. on ( 'end' , async ( ) => {
console. log ( formData)
await Student. create ( querystring. parse ( formData) )
res. writeHead ( 301 , {
Location: '/list' ,
} )
res. end ( )
} )
} )
module. exports = router
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;
}
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"] {
width : 120px;
position : absolute;
right : 0;
z-index : 9;
}
.import {
height : 40px;
position : relative;
}
const mongoose = require ( 'mongoose' )
mongoose
. connect ( 'mongodb://localhost/test' , {
useNewUrlParser: true ,
useUnifiedTopology: true ,
} )
. then ( ( ) => console. log ( '数据库连接成功' ) )
. catch ( ( ) => console. log ( '数据库连接成功' ) )
const mongoose = require ( 'mongoose' )
const {
mod
} = require ( 'prelude-ls' )
const studentsSchema = new mongoose. Schema ( {
name: {
type: String,
required: true ,
minlength: 2 ,
maxlength: 10
} ,
age: {
type: Number,
min: 10 ,
max: 22
} ,
sex: {
type: String
} ,
email: String,
hobbies: [ String] ,
collage: String,
enterDate: {
type: Date,
default : Date. now
}
} )
const Student = mongoose. model ( 'Student' , studentsSchema)
module. exports = Student