1.我们可以用package.json来管理依赖。
1.我们的依赖包,可能在随时更新,我们永远想保持更新,或者某持某一个版本;
2.项目越来越大的时候,给别人看的时候,没有必要再次共享我们引用的第三方模块。
3.在终端中,使用npm init
可以初始化一个package.json文件,用回答问题的方式生成一个新的package.json文件。
4.使用npm install
将能安装所有依赖。
npm文档:package.json的介绍
2.路径:
1.require()中的路径,是从当前这个js文件出发,找别的js文件。
2.fs模块引用时找文件都是从命令提示符找到文件所以应当使用绝对路径__dirname
例如:
fs.readFile(__dirname + "/1.txt",function(err,data){
if(err) { throw err; }
console.log(data.toString());
});
3.POST请求
1.node为了追求极致,它是一个小段一个小段接收的。
2.接受了一小段,可能就给别人去服务了。防止一个过大的表单阻塞了整个进程
- index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="http://127.0.0.1:3000/dopost" method="post">
用户名:<input type="text" name="name"><br/>
密 码:<input type="password" name="password"><br/>
性 别:<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女
<input type="submit" value="提交">
</form>
</body>
</html>
- index.js
var http = require("http");
var queryString = require("querystring");
var server = http.createServer(function (req,res) {
if(req.url == "/dopost" && req.method.toLowerCase() =="post") {
var alldata = "";
req.addListener("data",function (chunk) {
alldata+=chunk;
console.log(chunk)
})
req.addListener("end",function () {
var dataString = alldata.toString();
res.end("success");
var dataObj = queryString.parse(dataString);
console.log(dataObj);
console.log(dataObj.name);
console.log(dataObj.sex);
})
}
res.end();
})
server.listen(3000,"127.0.0.1");
填写信息并post提交:
4.图片上传(Formidable工具)
安装工具:
npm install formidable
- index.html
只要涉及文件上传,那么form标签要加一个属性:
enctype="multipart/form-data"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="http://127.0.0.1:3000/dopost" enctype="multipart/form-data" method="post">
用户名:<input type="text" name="name"><br/>
密 码:<input type="password" name="password"><br/>
<input type="file" name="img">
<input type="submit" value="提交">
</form>
</body>
</html>
- file.js
var http = require("http");
var formidable = require('formidable');
var util = require("util");
var fs = require("fs");
var sd = require("silly-datetime");
var path = require("path");
//创建服务器
var server = http.createServer(function(req,res){
//如果你的访问地址是这个,并且请求类型是post
if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
//Creates a new incoming form.
var form = new formidable.IncomingForm();
//设置文件上传存放地址
form.uploadDir = "./img";
//执行里面的回调函数的时候,表单已经全部接收完毕了。
form.parse(req, function(err, fields, files) {
//时间,使用了第三方模块,silly-datetime
var ttt = sd.format(new Date(), 'YYYYMMDDHHmmss');
var ran = parseInt(Math.random() * 89999 + 10000);
var extname = path.extname(files.img.name);
//执行改名
var oldpath = __dirname + "/" + files.img.path;
//新的路径由三个部分组成:时间戳、随机数、拓展名
var newpath = __dirname + "/img/" + ttt + ran + extname;
//改名
fs.rename(oldpath,newpath,function(err){
if(err){
throw Error("改名失败");
}
res.writeHead(200, {'content-type': 'text/plain'});
res.end("成功");
});
});
}
});
server.listen(3000,"127.0.0.1");