node.js 学习
文件的读取
1 const fs = require("fs"); 2 const path = require("path"); 3 4 fs.appendFile("./node/1.txt","\n2222222222",(err) => { 5 console.log("追加"+err); 6 }) 7 8 fs.readFile("./node/1.txt","utf-8",function(err,data){ 9 if(err){ 10 console.log(err.message); 11 }else{ 12 console.log("读"+data); 13 } 14 }) 15 16 fs.writeFile("./node/1.txt","333",(err) => { 17 console.log("写"+err); 18 }) 19 20 fs.copyFile(path.join(__dirname,"/1.txt"),path.join(__dirname,"/2.txt"),(err) => { 21 if(err) return console.log(err.message) 22 console.log("拷贝成功") 23 }) 24 25 fs.stat(path.join(__dirname,'/1.txt'),(err,data) => { 26 if(err) return console.log(err.message); 27 console.log(data.size);//读取文件大小 28 console.log(data.isFile());//是否是文件 29 })
文件的读写操作都是异步,在回调函数中返回数据 ,所有执行的顺序并不固定,当同时进行读,追加操作时,数据会变的无法预测。
创建服务器
1 const fs = require("fs") 2 const path = require("path") 3 4 require("http").createServer().on("request", (req, res) => { 5 let data = requestFlie(req.url, res) 6 }).listen(3000, "127.0.0.1", () => { 7 console.log("http://127.0.0.1:3000 启动") 8 }) 9 //由于fs.readFile()是异步操作,所以无法同步返回 读取的数据,只能通过传递参数 res ,调用res.end来返回数据并结束事件 10 function requestFlie(url, res) { 11 fs.readFile(path.join(__dirname, url), (err, data) => { 12 if (err) { 13 res.writeHeader(200, {"Content-Type":"text/html;charset=utf8"}) 14 res.end("文件不存在") 15 } 16 res.end(data) 17 }) 18 }
使用express 框架创建服务器,响应 静态文件 ,使用路由分发请求
server.js 启动服务器
1 const ex = require("express") 2 const path = require("path") 3 const app = ex() 4 //自定义中间组件 获取post请求的数据 5 app.use((req,res,next) => { 6 let dataStr = [] 7 req.on("data",(chunk) => { 8 dataStr.push(chunk) 9 }) 10 req.on("end",() => { 11 req.body = dataStr.join() 12 next() 13 }) 14 }) 15 16 const router = require("./router.js") 17 app.use(ex.static(__dirname)) 18 app.use(router) 19 20 app.listen(3000,() => { 21 console.log("启动") 22 })
router.js 分配路由
1 const ex = require("express") 2 const router = ex.Router() 3 const querystring = require('querystring') 4 5 6 router.post("/pushData",(req,res) => { 7 console.log(req.body); 8 res.send(querystring.parse(req.body)) 9 }) 10 module.exports = router
index.js 静态资源
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8 </head> 9 <body> 10 <form action="./pushData" method="post"> 11 <p>账号: <input type="text" name="username"> </p> 12 <p>密码: <input type="password" name="password"> </p> 13 <input type="submit" value="提交"> 14 </form> 15 </body> 16 </html>
在node.js中使用mysql
1 const ex = require("express") 2 const app = ex() 3 4 const mysql = require("mysql") 5 const connt = mysql.createConnection({ 6 "host": "localhost", 7 "user": "root", 8 "password": "123456", 9 "database": "book" 10 11 }) 12 const sqlStr = "select * from user" 13 connt.query(sqlStr, (err, data) => { 14 if (err) return console.log("获取数据失败" + err.message) 15 console.log("获取数据成功" + data) 16 }) 17 18 app.listen(3000, () => { 19 console.log("启动") 20 })
// ------------------新增---------------------- // const user = { uname: '小黄', age: 12, gender: '男' } // const sqlStr2 = 'insert into users set ?' // conn.query(sqlStr2, user, (err, result) => { // if (err) return console.log('插入数据失败!' + err.message) // console.log(result) // }) // -------------------修改------------------------- // const user = { id: 2, uname: '小绿', age: 22 } // const sqlStr3 = 'update users set ? where id=?' // // 注意:在 执行 conn.query 的时候,如果sql语句中,包含了 多个 ? 占位符,则, // // 第二个实参,必须传递一个数组,数组中的每一项,都要和 sql 语句中的 ? 对应上 // conn.query(sqlStr3, [user, user.id], (err, result) => { // if (err) return console.log('修改数据失败!' + err.message) // console.log(result) // }) // ---------------删除--------------------- // const sqlStr4 = 'delete from users where id=?' // conn.query(sqlStr4, 2, (err, result) => { // if (err) return console.log('删除失败!' + err.message) // console.log(result) // })
express框架获取post,get 参数
post参数 需要安装中间组件
npm i body-paser -S
注册body-parser中间件
1 const bodyParser = require('body-parser') 2 app.use(bodyParser.urlencoded({extended: true})) 3 app.use(bodyParser.json())
然后在回调函数中可以使用 req.body 或去post参数了
get对于 ?name=cs 这种可以 使用 req.query
对于/:name 这种使用 req.params