2、res.send(”hello word”); 输出字段
3、res.sendFile( __dirname + “/” + “index.htm” ); 输出HTML 文件
4、post请求需要输出加入urlencodedParser 解析
var bodyParser = require(‘body-parser’);
// 创建 application/x-www-form-urlencoded 编码解析
var urlencodedParser = bodyParser.urlencoded({ extended: false })
5、app.use 调用中间件,也就是调用函数
6、Router 是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成的
7、app.METHOD(PATH, HANDLER)。其中,app 是一个 express 实例;METHOD 是某个 HTTP 请求方式中的一个;PATH 是服务器端的路径;HANDLER 是当路由匹配到时需要执行的函数
例:app.get(‘/’, function (req, res) {
res.send(‘Hello World!’);
});
主要的HTTP请求方式 GET、POST(需要请求body-parser)、PUT、DELETE
8、 express.static 托管静态文件(相对路径存放)
app.use(express.static(‘public’));
访问:http://localhost:3000/css/style.css
可以同时调用多个目录
app.use(express.static(‘public’));
app.use(express.static(‘files’));
9、处理错误方法 多了一个err
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send(‘Something broke!’);
});
10、有些路由方法名不是合规的 JavaScript 变量名,此时使用括号记法,比如: app[‘m-search’]
11、app.all() 是一个特殊的路由方法 (任何请求都会响应)
app.all(‘/secret’, function (req, res, next) {
console.log(‘123’);
next();
});
12、指定访问的路由路径
app.get(‘/hello’,function(req,res,next){
console.log(‘22’);
next(); //访问下一个路由 res.rend(‘123’) 输出 并结束
})
13、路由句柄 使用next()来控制路由
app.get(‘/example/b’, function (req, res, next) {
console.log(‘123’);
next();
}, function (req, res) {
res.send(‘456’);
});
14、响应方法
方法 描述
res.download() 提示下载文件。
res.end() 终结响应处理流程。
res.json() 发送一个 JSON 格式的响应。
res.jsonp() 发送一个支持 JSONP 的 JSON 格式的响应。
res.redirect() 重定向请求。
res.render() 渲染视图模板。
res.send() 发送各种类型的响应。
res.sendFile 以八位字节流的形式发送文件。
res.sendStatus() 设置响应状态代码,并将其以字符串形式作为响应体的一部分发送。
15、链式路由句柄
app.route(‘/book’)
.get(function(req, res) {
res.send(‘Get a random book’);
})
.post(function(req, res) {
res.send(‘Add a book’);
})
.put(function(req, res) {
res.send(‘Update the book’);
});
16、创建路由模块
var express = require(‘express’);
var router = express.Router();
// 该路由使用的中间件
router.use(function timeLog(req, res, next) {
console.log(‘Time: ‘, Date.now());
next();
});
// 定义网站主页的路由
router.get(‘/’, function(req, res) {
res.send(‘Birds home page’);
});
// 定义 about 页面的路由
router.get(‘/about’, function(req, res) {
res.send(‘About birds’);
});
module.exports = router;
调用模块
var birds = require(‘./birds’);
app.use(‘/birds’, birds);
17、没有挂载中间件 任何请求都会执行
app.use(function (req, res, next) {
console.log(‘Time:’, Date.now());
next();
});
// 挂载至 /user/:id 的中间件,任何指向 /user/:id 的请求都会执行它
app.use(‘/user/:id’, function (req, res, next) {
console.log(‘Request Type:’, req.method);
next();
});
// 路由和句柄函数(中间件系统),处理指向 /user/:id 的 GET 请求 指定请求
app.get(‘/user/:id’, function (req, res, next) {
res.send(‘USER’);
});
18、一个挂载点装载一组中间件
// 一个中间件栈,对任何指向 /user/:id 的 HTTP 请求打印出相关信息
app.use(‘/user/:id’, function(req, res, next) {
console.log(‘Request URL:’, req.originalUrl);
next();
}, function (req, res, next) {
console.log(‘Request Type:’, req.method);
next();
});
19、一个请求可以定一两个路由 但因为第一个结束了 所以第二个不会执行
// 一个中间件栈,处理指向 /user/:id 的 GET 请求
app.get(‘/user/:id’, function (req, res, next) {
console.log(‘ID:’, req.params.id);
next();
}, function (req, res, next) {
res.send(‘User Info’);
});
// 处理 /user/:id, 打印出用户 id
app.get(‘/user/:id’, function (req, res, next) {
res.end(req.params.id);
});
20、跳过加载的中间件 直接执行下一条路由
// 一个中间件栈,处理指向 /user/:id 的 GET 请求
app.get(‘/user/:id’, function (req, res, next) {
// 如果 user id 为 0, 跳到下一个路由
if (req.params.id == 0) next(‘route’);
// 否则将控制权交给栈中下一个中间件
else next(); //
}, function (req, res, next) {
// 渲染常规页面
res.render(‘regular’);
});
// 处理 /user/:id, 渲染一个特殊页面
app.get(‘/user/:id’, function (req, res, next) {
res.render(‘special’);
});
21、路由级使用 router.use() 或 router.VERB() 加载。
22、中间件列表https://github.com/senchalabs/connect#middleware
23、views, 放模板文件的目录,比如: app.set(‘views’, ‘./views’)
//view engine, 模板引擎,比如: app.set(‘view engine’, ‘jade’)
app.engine(‘html’,require(‘ejs’).__express); 或者使用ejs 模板引擎
24、
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);
logErrors 将请求和错误信息写入标准错误输出、日志或类似服务:
function logErrors(err, req, res, next) {
console.error(err.stack);
next(err);
}
clientErrorHandler 的定义如下(注意这里将错误直接传给了 next):
function clientErrorHandler(err, req, res, next) {
if (req.xhr) {
res.status(500).send({ error: ‘Something blew up!’ });
} else {
next(err);
}
}
errorHandler 能捕获所有错误,其定义如下:
function errorHandler(err, req, res, next) {
res.status(500);
res.render(‘error’, { error: err });
}
25、使用Mongoose 模块连接接数据库
26、secret:一个String类型的字符串,作为服务器端生成session的签名。
name:返回客户端的key的名称,默认为connect.sid,也可以自己设置。
resave:(是否允许)当客户端并行发送多个请求时,其中一个请求在另一个请求结束时对session进行修改覆盖并保存。
默认为true。但是(后续版本)有可能默认失效,所以最好手动添加。
saveUninitialized:初始化session时是否保存到存储。默认为true, 但是(后续版本)有可能默认失效,所以最好手动添加。
cookie:设置返回到前端key的属性,默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。
27、生成ejs 模板
express -e xxx;
28、图片上传 参考链接:https://www.cnblogs.com/chyingp/p/express-multer-file-upload.html
var fs = require(‘fs’);
var express = require(‘express’);
var multer = require(‘multer’)
var app = express();
var upload = multer({ dest: ‘upload/’ });
// 单图上传
app.post(‘/upload’, upload.single(‘logo’), function(req, res, next){
res.send({ret_code: ‘0’});
});
app.get(‘/form’, function(req, res, next){
var form = fs.readFileSync(‘./form.html’, {encoding: ‘utf8’});
res.send(form);
});
app.listen(3000);
28、在nodejs的Express中,可以通过 req.body、req.query和req.params 三种形式来获取请求数据。
参考链接:http://blog.csdn.net/u012679583/article/details/50510717
http://www.expressjs.com.cn/