/nodejs_learn

学习nodejs,开发blog

Primary LanguageJavaScript

#github地址 git@github.com:hahaxixi/nodejs_learn.git ##安装依赖

  1. express cnpm i express@4.14.0 --save
  2. cnpm install -g supervisor 在开发过程中,每次修改代码保存后,我们都需要手动重启程序,才能查看改动的效果。使用 supervisor 可以解决这个繁琐的问题,全局安装 supervisor:运行 supervisor --harmony index 启动程序
  3. cnpm i ejs --save 模板引擎有很多,ejs 是其中一种,因为它使用起来十分简单,而且与 express 集成良好,所以我们使用 ejs。安装 ejs:

正式开发安装的依赖

npm i config-lite connect-flash connect-mongo ejs express express-formidable express-session marked moment mongolass objectid-to-timestamp sha1 winston express-winston --save 对应模块的用处: express: web 框架 express-session: session 中间件 connect-mongo: 将 session 存储于 mongodb,结合 express-session 使用 connect-flash: 页面通知提示的中间件,基于 session 实现 ejs: 模板 express-formidable: 接收表单及文件的上传中间件 config-lite: 读取配置文件 marked: markdown 解析 moment: 时间格式化 mongolass: mongodb 驱动 objectid-to-timestamp: 根据 ObjectId 生成时间戳 sha1: sha1 加密,用于密码加密 winston: 日志 express-winston: 基于 winston 的用于 express 的日志中间件

##知识点

  1. 路由获取参数的方法: req 包含了请求来的相关信息,res 则用来返回该请求的响应,更多请查阅 express 官方文档。下面介绍几个常用的 req 的属性: req.query: 解析后的 url 中的 querystring,如 ?name=haha,req.query 的值为 {name: 'haha'} req.params: 解析 url 中的占位符,如 /:name,访问 /haha,req.params 的值为 {name: 'haha'} req.body: 解析后请求体,需使用相关的模块,如 body-parser,请求体为 {"name": "haha"},则 req.body 为 {name: 'haha'}

  2. ejs 有 3 种常用标签: <% code %>:运行 JavaScript 代码,不输出 <%= code %>:显示转义后的 HTML内容 <%- code %>:显示原始 HTML 内容 3 中间件 express 中的中间件(middleware)就是用来处理请求的,当一个中间件处理完,可以通过调用 next() 传递给下一个中间件,如果没有调用 next(),则请求不会往下传递,如内置的 res.render 其实就是渲染完 html 直接返回给客户端,没有调用 next(),从而没有传递给下一个中间件。 通过 app.use 加载中间件,在中间件中通过 next 将请求传递到下一个中间件,next 可接受一个参数接收错误信息,如果使用了 next(error),则会返回错误而不会传递到下一个中间件. 看个小例子,修改 index.js 如下: var express = require('express'); var app = express();

    	app.use(function(req, res, next) {
    	  console.log('1');
    	  next(new Error('haha'));
    	});
    
    	app.use(function(req, res, next) {
    	  console.log('2');
    	  res.status(200).end();
    	});
    
    	app.listen(3000);
    

4 session 中间件会在 req 上添加 session 对象,即 req.session 初始值为 {},当我们登录后设置 req.session.user = 用户信息,返回浏览器的头信息中会带上 set-cookie 将 session id 写到浏览器 cookie 中,那么该用户下次请求时,通过带上来的 cookie 中的 session id 我们就可以查找到该用户,并将用户信息保存到 req.session.user 5 中间件的加载顺序很重要。如上面设置静态文件目录的中间件应该放到 routes(app) 之前加载,这样静态文件的请求就不会落到业务逻辑的路由里;flash 中间件应该放到 session 中间件之后加载,因为 flash 是基于 session 的