nodejs中express入门和基础知识点学习
初始化新建一个目录myapp,项目初始化 安装express创建一个hello world实例进入myapp目录,创建一个名为app.js app.get('/',function(req,res) {
res.send('Hello World!'); }); var server = app.listen(3000,function() { console.log('Example app listening at http://%s:%s',host,port); 上面的代码启动一个服务并监听从 3000 端口进入的所有连接请求。他将对所有 (/) URL 或 路由 返回 “Hello World!” 字符串。对于其他所有路径全部返回 404 Not Found。 通过以下命令行启动 express生成器通过应用生成器工具 express 可以快速创建一个应用的骨架。 1.安装以下命令 2.在当前目录创建myapp的应用,运行以下命令 set DEBUG=myapp & npm start
通过 Express 应用生成器创建的应用一般都有如下目录结构: 7 directories,9 files
express路由路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。每一个路由都可以有一个或者多个处理器函数,当匹配到路由时,这个/些函数将被执行。 路由的定义由如下结构组成:app.METHOD(PATH,HANDLER)。其中,app 是一个 express 实例;METHOD 是某个 HTTP 请求方式中的一个;PATH 是服务器端的路径;HANDLER 是当路由匹配到时需要执行的函数。 以下是一些常见的路由代码: // respond with "hello world" when a GET request is made to the homepage
app.get('/',res) { res.send('hello world'); }); // POST method route 使用字符串模式的路由路径示例:字符 ?、+、* 和 () 是正则表达式的子集,- 和 . 在基于字符串的路径中按照字面值解释。 // 匹配 abcd、abbcd、abbbcd等
app.get('/ab+cd',res) { res.send('ab+cd'); }); // 匹配 abcd、abxcd、abRABDOMcd、ab123cd等 // 匹配 /abe 和 /abcde //使用正则表达式的路由路径示例: // 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等 路由句柄可以为请求处理提供多个回调函数,其行为类似 中间件。唯一的区别是这些回调函数有可能调用 next('route') 方法而略过其他路由回调函数。 路由句柄有多种形式,可以是一个函数、一个函数数组,或者是两者混合,如下所示: //使用回调函数数组处理路由:
var cb0 = function (req,next) { console.log('CB0'); next(); } var cb1 = function (req,next) { console.log('CB1'); next(); } var cb2 = function (req,res) { res.send('Hello from C!'); } app.get('/example/c',[cb0,cb1,cb2]); 响应方法下表中响应对象(res)的方法向客户端返回响应,终结请求响应的循环。如果在路由句柄中一个方法也不调用,来自客户端的请求会一直挂起。 方法 描述:
app.route() 可使用 app.route() 创建路由路径的链式路由句柄。由于路径在一个地方指定,这样做有助于创建模块化的路由,而且减少了代码冗余和拼写错误。 express.Router 可使用 express.Router 类创建模块化、可挂载的路由句柄。Router 实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”。 在 app 目录下创建名为 birds.js 的文件,内容如下: 然后在应用中加载路由模块: 应用即可处理发自 /birds 和 /birds/about 的请求,并且调用为该路由指定的 timeLog 中间件。 利用 Express 托管静态文件 通过 Express 内置的 express.static 可以方便地托管静态文件,例如图片、CSS、JavaScript 文件等。 将静态资源文件所在的目录作为参数传递给 express.static 中间件就可以提供静态资源文件的访问了。例如,假设在 public 目录放置了图片、CSS 和 JavaScript 文件,你就可以: 现在,public 目录下面的文件就可以访问了。 如果你的静态资源存放在多个目录下面,你可以多次调用 express.static 中间件: 如果你希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示: 现在,你就爱可以通过带有 “/static” 前缀的地址来访问 public 目录下面的文件了。 常见问题 如何处理 404 ? 在 Express 中,404 并不是一个错误(error)。因此,错误处理器中间件并不捕获 404。这是因为 404 只是意味着某些功能没有实现。也就是说,Express 执行了所有中间件、路由之后还是没有获取到任何输出。你所需要做的就是在其所有他中间件的后面添加一个处理 404 的中间件。如下: Express 支持哪些模板引擎? Express 支持任何符合 (path,locals,callback) 接口规范的模板引擎。 如何渲染纯 HTML 文件? 不需要!无需通过 res.render() 渲染 HTML。你可以通过 res.sendFile() 直接对外输出 HTML 文件。如果你需要对外提供的资源文件很多,可以使用 express.static() 中间件。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |