安装cnpm:
npm config set registry https://registry.npm.taobao.org(永久使用)
npm --registry https://registry.npm.taobao.org install express(临时使用)
1、安装 Express
cnpm install express --save 安装Express并将其保存到依赖列表中
body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。
cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。
multer - node.js 中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。
cnpm install body-parser --save
cnpm install cookie-parser --save
cnpm install multer --save
cnpm list express 安装完后,我们可以查看下 express 使用的版本号:
2、简单使用
//express_demo.js 文件
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World');
})
//var server = app.listen(3456, "127.0.0.1", function () {})指定ip,一般用的是127.0.0.1
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
在浏览器中访问 http://127.0.0.1:8081,会显示hello world
Request 对象 - request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性
.获取客户ip地址:request.ip
.获取上传的文件:request.files
Response 对象 - response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据
重定向redirect
response.redirect("/hello/anime");//重定向到/hello/anime
.发送文件sendFile
response.sendFile("/path/to/anime.mp4");
.渲染网页模板render,即把变换的内容加载到网页.
response.render("index", { message: "Hello World" });//将message变量传入index模板,值为"Hello World"渲染成HTML网页
2、路由决定了由谁(指定脚本)去响应客户端请求。
// /del_user 页面响应
app.get('/del_user', function (req, res) {
console.log("/del_user 响应 DELETE 请求");
res.send('删除页面');
})
// 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求
app.get('/ab*cd', function(req, res) {
console.log("/ab*cd GET 请求");
res.send('正则匹配');
})
3、静态文件express.static 中间件来设置静态文件路径。例如,如果你将图片, CSS, JavaScript 文件放在 public 目录下,可以这么写:
app.use('/public', express.static('public'));
4、GET 、post方法:
index.html内容
<html>
<body>
<form action="http://127.0.0.1:8081/process_get" method="GET">
First Name: <input type="text" name="first_name"> <br>
Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
</form>
</body>
</html>
server.js
ar express = require('express');
var app = express();
app.use('/public', express.static('public'));
app.get('/index.htm', function (req, res) {
res.sendFile( __dirname + "/" + "index.htm" );
})
app.get('/process_get', function (req, res) {
// 输出 JSON 格式
var response = {
"first_name":req.query.first_name,
"last_name":req.query.last_name
};
console.log(response);
res.end(JSON.stringify(response));
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
5、上传文件
var express = require('express');
var app = express();
var fs = require("fs");
var bodyParser = require('body-parser');
var multer = require('multer');
app.use('/public', express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(multer({ dest: '/tmp/'}).array('image'));
app.get('/index.htm', function (req, res) {
res.sendFile( __dirname + "/" + "index.htm" );
})
app.post('/file_upload', function (req, res) {
console.log(req.files[0]); // 上传的文件信息
var des_file = __dirname + "/" + req.files[0].originalname;
fs.readFile( req.files[0].path, function (err, data) {
fs.writeFile(des_file, data, function (err) {
if( err ){
console.log( err );
}else{
response = {
message:'File uploaded successfully',
filename:req.files[0].originalname
};
}
console.log( response );
//中文编码处理
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end( JSON.stringify( response ) );
});
});
})
6、Cookie 管理
var cookieParser = require('cookie-parser')
var util = require('util');
var app = express()
app.use(cookieParser())
app.get('/', function(req, res) {
console.log("Cookies: " + util.inspect(req.cookies));
})
7、添加 favicon.ico
在 public/images 添加文件 favicon.ico
打开 myapp 下的 app.js 在其中添加
var favicon = require('serve-favicon');
app.use(favicon(__dirname+'/public/images/favicon.ico'));
然后通过命令行安装 serve-favicon
重启应用即可
8、中间件:处理HTTP请求的函数.
参数为:
.四个的时候---第一个为错误处理,第二个为客户请求request,第三个为服务器响应respond,第四个为next中间件. 如function(error, request, response, next){}
.三个的时候---第一个客户请求request,第二个为服务器响应respond,第三个为next中间件. 如function(request, response, next){}
.两个的时候---第一个客户请求request,第二个为服务器响应respondfunction. 如function(request, response){}
中间件use
app.use(express.bodyParser());//使用body参数
app.use(express.methodOverride());//使用函数覆盖
app.use(app.router);//使用路由
app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});//错误内容显示
9、动态网页模板views
res.render('index',{title:"最近文章"});
npm install -g express-generator
npm update -g express
express APP_NAME //创建项目
express APP_NAME -e //以ejs作为模板引擎创建项目
将ejs文件(EJS 是一套简单的模板语言,用普通的 JavaScript 代码生成 HTML 页面)改为html
var ejs = require('ejs');
app.engine('.html', ejs.__express);
app.set('view engine', 'html'); //app.set('view engine', 'ejs');
npm install;//在项目文件夹
每次修改代码后,需要手动重启服务,可以使用nodemon进行自动重启
npm install -g nodemon
将package.json文件中的代码修改为:
"start": "nodemon ./bin/www