什么是数据库
能长久存放数据的地方,就是数据库 应用最广泛的数据库 MySQL
- 下载文件 https://github.com/chenfeng900000029/serverfile保存到本地
建个文件夹保存
2.进入到这个文件夹 cd
3.再这个文件夹执行 node server.js 8888 或者 node server 8888
4.编辑 server.js
5.在server文件中创建一个html并编辑html
Record 100
复制代码
- server 文件中创建 touch db ← 将作为数据库文件 编辑文件 写入 100 接着 修改html文件
复制代码Record 我的金额&&&amount&&&
7.编辑 server.js 承接 第6步
var http = require('http')var fs = require('fs')var url = require('url')var port = process.argv[2]if(!port){ console.log('请指定端口号好不啦?\nnode server.js 8888 这样不会吗?') process.exit(1)}var server = http.createServer(function(request, response){ var parsedUrl = url.parse(request.url, true) var pathWithQuery = request.url var queryString = '' if(pathWithQuery.indexOf('?') >= 0){ queryString = pathWithQuery.substring(pathWithQuery.indexOf('?')) } var path = parsedUrl.pathname var query = parsedUrl.query var method = request.method /******** 从这里开始看,上面不要看 ************/ if(path === '/'){ var string = fs.readFileSync('./index.html','utf8') var amount = fs.readFileSync('./db','utf8') //100 string = string.replace('&&&amount&&&',amount) response.statusCode = 200 response.setHeader('Content-Type', 'text/html;charset=utf-8') response.write(string) //'重要' 关联string (页面) response.end()// '重要' 请求的/pay 请求的方式 post 大小写要对应 }else if(path === '/pay' && method.toUpperCase()==='POST'){ //读取文件 格式 var amount = fs.readFileSync('./db','utf8') //100 //计算 var newAmount= amount - 1 //再将计算后的值写入 /db fs.writeFileSync('./db',newAmount) //返回状态 response.write('success') //结束 response.end() }else{ response.statusCode = 404 response.setHeader('Content-Type', 'text/html;charset=utf-8') response.write('呜呜呜') response.end() } /******** 代码结束,下面不要看 ************/})server.listen(port)console.log('监听 ' + port + ' 成功\n请用在空中转体720度然后用电饭煲打开 http://localhost:' + port)复制代码
7.1 添加一个概率 #模拟#
var http = require('http')var fs = require('fs')var url = require('url')var port = process.argv[2]if(!port){ console.log('请指定端口号好不啦?\nnode server.js 8888 这样不会吗?') process.exit(1)}var server = http.createServer(function(request, response){ var parsedUrl = url.parse(request.url, true) var pathWithQuery = request.url var queryString = '' if(pathWithQuery.indexOf('?') >= 0){ queryString = pathWithQuery.substring(pathWithQuery.indexOf('?')) } var path = parsedUrl.pathname var query = parsedUrl.query var method = request.method /******** 从这里开始看,上面不要看 ************/ console.log('方方说:含查询字符串的路径\n' + pathWithQuery) if(path === '/'){ var string = fs.readFileSync('./index.html','utf8') var amount = fs.readFileSync('./db','utf8') //100 string = string.replace('&&&amount&&&',amount) response.statusCode = 200 response.setHeader('Content-Type', 'text/html;charset=utf-8') response.write(string) //重要 关联string (页面) response.end() }else if(path === '/pay' && method.toUpperCase()==='POST'){ var amount = fs.readFileSync('./db','utf8') //100 var newAmount= amount - 1 //模拟 50% 成功率 if(Math.random()>0.5){ fs.writeFileSync('./db',newAmount) response.write('success') }else{ response.write('失败') } response.end() }else{ response.statusCode = 404 response.setHeader('Content-Type', 'text/html;charset=utf-8') response.write('呜呜呜') response.end() } /******** 代码结束,下面不要看 ************/})server.listen(port)console.log('监听 ' + port + ' 成功\n请用在空中转体720度然后用电饭煲打开 http://localhost:' + port)复制代码
6.1 优化 提示内容 添加一个iframe
复制代码Record 我的金额&&&amount&&&
###############################
利用script创建请求 (只有get 没办法post)
HTML
Record 我的金额&&&amount&&&
复制代码
server.js
var http = require('http')var fs = require('fs')var url = require('url')var port = process.argv[2]if(!port){ console.log('请指定端口号好不啦?\nnode server.js 8888 这样不会吗?') process.exit(1)}var server = http.createServer(function(request, response){ var parsedUrl = url.parse(request.url, true) var pathWithQuery = request.url var queryString = '' if(pathWithQuery.indexOf('?') >= 0){ queryString = pathWithQuery.substring(pathWithQuery.indexOf('?')) } var path = parsedUrl.pathname var query = parsedUrl.query var method = request.method /******** 从这里开始看,上面不要看 ************/ console.log('方方说:含查询字符串的路径\n' + pathWithQuery) if(path === '/'){ var string = fs.readFileSync('./index.html','utf8') var amount = fs.readFileSync('./db','utf8') //100 string = string.replace('&&&amount&&&',amount) response.statusCode = 200 response.setHeader('Content-Type', 'text/html;charset=utf-8') response.write(string) //重要 关联string (页面) response.end() }else if(path === '/pay'){ var amount = fs.readFileSync('./db','utf8') //100 var newAmount= amount - 1 response.setHeader('Content-Type', 'application/javascript') response.statusCode=200 fs.writeFileSync('./db',newAmount) //不刷新直接修改 余额 response.write(` amount.innerText = amount.innerText - 1 `) response.end() }else{ response.statusCode = 404 response.setHeader('Content-Type', 'text/html;charset=utf-8') response.write('呜呜呜') response.end() } /******** 代码结束,下面不要看 ************/})server.listen(port)console.log('监听 ' + port + ' 成功\n请用在空中转体720度然后用电饭煲打开 http://localhost:' + port)复制代码
jsonp
1.请求方: coo.com 的前端 (浏览器)
2.相应方: bug.com 的后端 (服务器)
- 1 请求方创建script src指向响应方 同时传一个查询参数?callback=xxx
- 2 响应方 根据查询参数 callback 构造形如
-
1. xxx.call(undefind,'你要的数据')复制代码
-
2. xxx(undefind,'你要的数据')复制代码
- 3 浏览器接收到响应, 就会执行 xxx.call(undefind,'你要得数据')
- 4.那么请求方就知道了他要的数据
约定: callbackName 约定就叫callback yyy 一般用的是随机数字
jsonp 为什么不支持post
jsonp是动态创建script实现的 动态创建script只有get没有post