基于HTTP模块,Connect提供了开发Web应用常用的基础功能,而Express基于Connect为构建整个网站以及Web应用提供了简单方便的API。
本文主要用于了解Express的用法和功能。
1、创建模块,引入相关依赖
2、创建app
3、配置模板引擎
4、定义路由
5、监听
ejs模板引擎将JavaScript代码嵌在<%和%>EJS标签中。另外,通过在<%之后加入“=”符号将变量值打印出来。
// index.ejx
const express = require('express');
const app = express(); // 初始化web服务器
app.set('view engine', 'ejs'); // 指定模版引擎,这样就不需要每次载入视图时都要引入
app.set('views',__dirname + '/views'); //设置应用程序视图的目录或目录数组。如果是数组,则按照视图在数组中出现的顺序查找视图。
app.get('/',function(req,res) {
res.render('index');
});
app.listen(3000);
定义查询函数:
SuperAgent是一个小型的渐进式客户端和Node.js HTTP请求库,具有许多高级HTTP客户端功能。
// search.js
const request = require('superagent');
module.exports = function search(query,fn) {
request.get('http://t.weather.sojson.com/api/weather/city/101030100')
.query({ q: query}) // query string
.end(function(err,res) {
if (res.body) {
return fn(null,res.body.cityInfo);
}
fn(new Error('bad response'));
});
}
对于查询结果对应的模版
// search.ejs
const request = require('superagent');
module.exports = function search(query,fn) {
request.get('http://t.weather.sojson.com/api/weather/city/101030100') // 该API是该某网站找到json接口
.query({ q: query}) // query string
.end(function(err,res) {
if (res.body) {
return fn(null,res.body.cityInfo);
}
fn(new Error('bad response'));
});
}
查询结果如下:
设置
Express提供了不少特性,同时拥有对任意类型web应用都不可或缺的,就是对环境设置的管理能力。
比如,在生产环境下,为了提高性能,我们可以设置Express将模版缓存起来,这样可以加快缓存速度。。然而,若在开发模式下开启这个功能,每次对模版稍做改动就需要重启Node服务程序
app.set('view cache', true);
当有JSONP请求时,其URL请求类似:/my/route?callback=myCallback
Express会自动检测callback参数,并将相应的结果包括在myCallback文本中,这只作用于res.send和res.json
错误处理
在Node中,将错误对象作为非阻塞I/O回调函数的第一个参数是很常见的。
具体可参见文档。
定义路由
app.get(’/post/:name’,function(){}); 这里那么变量会注入到req.params对象上。
定义路由时也可以使用RegExp对象。
和中间件一样,在路由处理程序中也可以使用next。即使当一个路由匹配并得到处理,还是可以强制Express去继续匹配其他路由。