nodejs 搭建静态web服务器
拆分【07-搭建静态web服务】中http.js
新建model/router.js
/**
* req = request 获取浏览器参数
* res = response 返回数据
*/
var fs = require('fs')
var events = require('events')
var url = require('url')
var path = require('path')
var EventEmitter = new events.EventEmitter()
exports.static = function(req, res){
var urlName = url.parse(req.url).pathname
if (urlName == '/favicon.ico') return
if (urlName == '/') {
urlName = 'index.html'
}
/**
* 过滤掉?之后的数据
* 例: www.xx.com/index.html?asdasdadas=2 -----> www.xx.com/index.html
*/
getSuffixName(path.extname(urlName))
EventEmitter.on('send', (suffixName)=>{
fs.readFile(`static/${urlName}`, (err, data)=>{
if (err) {
fs.readFile('static/404.html', (error, result)=>{
if (error) return
res.writeHead(200, {"Content-Type": `${suffixName};charset=UTF-8`});
/**
* 使用EventEmitter会出现Error [ERR_STREAM_WRITE_AFTER_END]: write after end错误
* 这边建议直接end返回
*/
// res.write(result)
res.end(result)
})
} else {
res.writeHead(200, {"Content-Type": `${suffixName};charset=UTF-8`});
// res.write(data)
res.end(data)
}
})
})
}
function getSuffixName (url) {
fs.readFile('model/mime.json', 'utf8',(err,data)=> {
if (err){
console.log(err)
return
}
var result = JSON.parse(data)
for (var i in result) {
if (i == url) {
// return result[i]
EventEmitter.emit('send', result[i])
return
}
}
})
}
http.js
var http = require('http');
var path = require('path')
var router = require('./model/router')
/**
* http.createServer()创建http服务器
*/
console.log(path.extname('index.html')) // 输出.html
http.createServer(function(req,res){
router.static(req,res)
}).listen('8080')
console.log('server is running')
简单的使用ejs模板
安装 npm install ejs --save-dev
具体使用查看官网ejs官网
index.js
var http = require('http')
var url = require('url')
var ejs = require('ejs')
http.createServer(function(req, res){
if (req.url == '/favicon.ico') return
res.writeHead(200, {"Content-Type": "text/html;charset=UTF-8"})
var pathname = url.parse(req.url).pathname
if (pathname == '/login') {
ejs.renderFile('views/login.ejs', {
msg: '你好啊'
}, (err, data)=>{
if (err) {
console.log(err)
return
}
res.end(data)
})
} else {
res.end('结束')
}
}).listen('8089')
console.log('server is Running at 8089')
新建views/login.ejs
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p>ejs模板--登录</p>
<p><%=msg %></p>
</body>
</html>
form表单 提交数据
views/form.ejs
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="/dologin" method="post">
<input type="text" name="name" >
<br>
<input type="text" name="password">
<br>
<input type="submit" value="提交">
</form>
</body>
</html>
获取get提交的数据
get.js
/**
* 获取数据
*/
var query = url.parse(req.url).query
console.log(query)
res.end(query)
获取post提交的数据
post.js
/**
* 获取数据
*/
var postData = ''
req.on('data', (data)=>{
postData += data
})
req.on('end', (err, data)=>{
fs.appendFile('login.txt', `${postData}\n`, (err, data)=>{
if (err) {
console.log(err)
return
}
console.log('写入成功')
})
res.end(postData)
})
网友评论