nodejs实现动态WEB服务器与服务器自动重启nodemon
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了nodejs实现动态WEB服务器与服务器自动重启nodemon,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5116字,纯文字阅读大概需要8分钟。
内容图文
常见的命令行工具
nrm
-
nrm:npm registry manager(npm仓库地址管理工具)
-
安装:
npm i -g nrm
# 带*表示当前正在使用的地址
# 查看仓库地址列表
nrm ls
# 切换仓库地址
nrm use taobao
nodemon 自动重启
-
作用:监视到js文件修改后,自动重启node程序
-
安装:
npm i -g nodemon
-
使用:
nodemon app.js
运行node程序
实现动态WEB服务器
动态网站和静态网站
静态网站
-
我们已经基于 Node.js 开发了一个静态网站的 web 服务器。
-
处理的过程找到你请求对应的路径 → 读取文件 → 将文件内容响应给客户端浏览器(文件原封不动的给你)
-
无法满足让网页内容动起来(随着数据动态变化)的需求。
动态网站
-
动态网站的原理:不再将 HTML 固定写死
-
每次用户请求时,动态执行一段代码,临时生成一个用户想要的 HTML 页面。
-
这种实现这种概念的技术有很多种:JSP、ASP.NET、PHP、Node 等等。
-
动态网站指的也就是每次请求时服务端动态生成 HTML 返回给用户的这种网站。
-
目的:了解服务端开发,以及某些其他对前端开发有帮助的东西。
使用json存储数据
[
{
"id": 1,
"name": "小红",
"time": "2018-1-1 12:20:00",
"content": "何必向不值得的人证明什么,生活得更好,乃是为你自己"
},
{
"id": 2,
"name": "小红",
"img": "public/images/timg.jpg",
"time": "2018-1-1 12:20:00",
"content": "让我将我不朽的爱,留给世界"
},
{
"id": 3,
"name": "小红",
"img": "public/images/timg.jpg",
"time": "2018-1-1 12:20:00",
"content": "老天在送你一个大礼物时,都会用重重困难做包装。"
}
]
在node中使用art-template
-
安装
npm install art-template
核心方法 :
// 基于模板路径渲染模板
//参数1:文件的路径
//参数2:数据
//返回值:返回渲染后的内容
// template(filename, data)
let html = template(path.join(__dirname, "pages", "index.html"), {name:"大吉大利,今晚吃鸡"});
注意点:文件的路径必须是绝对路径
get请求处理-url模块
-
说明:用于 URL 处理与解析
-
注意:通过url拿到的查询参数都是字符串格式
// 导入url模块
var url = require('url')
// 解析 URL 字符串并返回一个 URL 对象
// 第一个参数:表示要解析的URL字符串
// 第二个参数:是否将query属性(查询参数)解析为一个对象,如果为:true,则query是一个对象
var ret = url.parse('http://localhost:3000/details?id=1&name=jack', true)
console.log(ret.query) // { id: '1', name: 'jack' }
服务端重定向
-
说明:服务端可以通过HTTP状态码让浏览器中的页面重定向
res.writeHead(302, {
'Location': '/'
})
res.end()
POST请求参数的处理
-
说明:POST请求可以发送大量数据,没有大小限制
// 接受POST参数
var postData = []
// data事件:用来接受客户端发送过来的POST请求数据
var result = "";
req.on('data', function (chunk) {
result += chunk;
})
// end事件:当POST数据接收完毕时,触发
req.on('end', function () {
cosnole.log(result);
})
请求体处理-querystring模块
-
用于解析与格式化 URL 查询字符串
-
注意:只在专门处理查询字符串时使用
// foo=bar&abc=xyz&abc=123
var querystring = require('querystring')
// 将查询参数转化为对象
// 第一个参数: 要解析的 URL 查询字符串
querystring.parse('foo=bar&abc=xyz') // { foo: 'bar', abc: 'xyz' }
const http = require('http')
const fs = require('fs')
const path = require('path')
const querystring = require('querystring')
const objUrl = require('url')
const mime = require('mime')
const moment = require('moment')
const template = require('art-template')
//data.json文件路径
const dbpath = path.join(__dirname, 'data.json')
//创建服务器
const server = http.createServer()
server.listen(8888, () => {
console.log('服务器启动成功了')
})
server.on('request', (req, res) => {
const url = req.url
// console.log(url)
if(url === '/' || url === '/index'){
const filepath = path.join(__dirname, 'views', 'index.html')
fs.readFile(dbpath,'utf8', (err, data) => {
if(err) return console.log(err)
data = JSON.parse(data)
const html = template(filepath, data)
res.setHeader('content-type','text/html;charset=utf-8')
res.end(html)
})
} else if(url === '/add'){
const filepath = path.join(__dirname, 'views', 'add.html')
fs.readFile(filepath, (err, data) => {
if(err) return console.log(err)
res.end(data)
})
} else if(url.startsWith('/static')){
const filepath = path.join(__dirname, url)
fs.readFile(filepath, (err, data) => {
if(err){
res.statusCode = 404
res.setHeader('content-type','text/html;charset=utf-8')
res.end('404,你请求的资源不存在')
return
}
res.setHeader('content-type', mime.getType(url))
res.end(data)
})
} else if(url.startsWith('/fb') && req.method === 'POST'){
console.log(url)
let result = ''
req.on('data', chunk => {
result += chunk
})
req.on('end', () => {
const query = querystring.parse(result)
// console.log(query)
let temp = {
...query,
id:+new Date(),
time:moment().format('YYYY年MM年DD日 HH:mm:ss')
}
fs.readFile(dbpath,'utf8', (err, data) => {
if(err)return console.log(err)
data = JSON.parse(data)
// console.log(data)
data.total++
data.list.unshift(temp)
fs.writeFile(dbpath, JSON.stringify(data, null, 2), err => {
if(err) return console.log(err)
res.writeHead(302, {
Location: '/'
})
res.end()
})
})
})
} else if(url.startsWith('/delete')){
console.log(url)
const id = objUrl.parse(url, true).query.id
// console.log(id)
fs.readFile(dbpath, 'utf8', (err, data) => {
if(err) return console.log(err)
data = JSON.parse(data)
// console.log(data)
data.total--
data.list = data.list.filter(item => item.id !== +id)
fs.writeFile(dbpath, JSON.stringify(data, null, 2), err => {
if(err) return console.log(err)
res.writeHead(302, {
Location: '/'
})
res.end()
})
})
} else {
res.statusCode = 404
res.setHeader('content-type', 'text/html;charset=utf-8')
res.end('404,你请求的资源不存在')
}
})
内容总结
以上是互联网集市为您收集整理的nodejs实现动态WEB服务器与服务器自动重启nodemon全部内容,希望文章能够帮你解决nodejs实现动态WEB服务器与服务器自动重启nodemon所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。