Nodejs express4.8之microblog学习笔记

Nodejs express4.8之microblog学习笔记

学习环境:

nodejs :4.4.3,express :4.13.4,mongoDB : 3.2.4,robomongo: 0.9.0-RC7

依赖

package.json

学习例子:

nswbmw一个简单的博客

接下来,我将按照例子中的章节依次列出遇到的问题以及解决的方法。

第1章 一个简单的博客

1、windows下用set DEBUG=express:* node ./bin/www设置DEBUG环境变量,再用npm start访问页面,但是输出的信息太多了,所以我们干脆不设(使用“set DEBUG=”清除DEBUG环境变量),就用npm start,此时在bin/www里面的debug('Listening on ’ + bind)下面添加console.log('Listening on ’ + bind); 2、不必按照作者那样把建立服务器也弄到app.js里面来,就让它在bin/www里就好; 3、建议使用nodemon代替supervisor; 4、app.use(flash());要放在app.use(session({}))之前; 5、控制台会提示express-session的配置里面最好设置resave、saveUninitialized; 6、注册用户成功后,回调里面的user[0]改为user.ops[0],可以将user的结构打出来看看。

第3章 增加文件上传功能

如果你跟我一样使用的1.1.0的multer,那么请按照以下步骤增加上传功能: 1、index.js

var multer  = require('multer');
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
  	cb(null, './public/images')
  }
})
app.post('/upload', checkLogin);
app.post('/upload',multer({ storage: storage }).array('photos', 12), function (req, res) {
  req.flash('success', '文件上传成功!');
  res.redirect('/upload');
});

2、upload.ejs 所有file input的name都改为photos

第14章 增加头像

因为http://www.gravatar.com被墙了,所以把http://www.gravatar.com换成http://gravatar.duoshuo.com

第15章 增加转载功能和转载统计

给转载链接注册了路由响应并不需要Post.edit()

我的blog

https://github.com/yuu2lee4/myblog


9 回复

Nodejs express4.8之microblog学习笔记

学习环境:

  • nodejs: 4.4.3
  • express: 4.13.4
  • mongoDB: 3.2.4
  • robomongo: 0.9.0-RC7

依赖

{
  "dependencies": {
    "express": "^4.13.4",
    "mongoose": "^4.4.18",
    "multer": "^1.1.0",
    "ejs": "^2.3.4",
    "connect-flash": "^0.1.1"
  }
}

学习例子:

接下来,我将按照例子中的章节依次列出遇到的问题以及解决的方法。

第1章 一个简单的博客

  1. 设置调试环境变量

    • 在 Windows 下使用 set DEBUG=express:* node ./bin/www 设置调试环境变量。如果觉得输出信息太多,可以使用 set DEBUG= 清除环境变量。
    • 示例代码:
      // bin/www
      var debug = require('debug')('myapp:server');
      var http = require('http');
      
      /**
       * Get port from environment and store in Express.
       */
      var port = normalizePort(process.env.PORT || '3000');
      app.set('port', port);
      
      /**
       * Create HTTP server.
       */
      var server = http.createServer(app);
      
      /**
       * Listen on provided port, on all network interfaces.
       */
      server.listen(port);
      server.on('error', onError);
      server.on('listening', () => {
        debug(`Listening on ${port}`);
        console.log(`Listening on ${port}`);
      });
      
  2. 分离服务器创建逻辑

    • 不必将创建服务器的逻辑放入 app.js,而是保持在 bin/www 文件中。
  3. 使用 nodemon 替代 supervisor

    • 使用 nodemon 来替代 supervisor,因为 nodemon 更简洁且更易于维护。
    • 安装 nodemon:
      npm install -g nodemon
      
    • 启动项目:
      nodemon ./bin/www
      
  4. flash 中间件的使用顺序

    • 确保 app.use(flash()) 放在 app.use(session({})) 之前。
    • 示例代码:
      // app.js
      const express = require('express');
      const session = require('express-session');
      const flash = require('connect-flash');
      
      const app = express();
      
      app.use(session({
        secret: 'secret',
        resave: false,
        saveUninitialized: true
      }));
      app.use(flash());
      
  5. 配置 express-session

    • 配置 express-session 时,最好设置 resavesaveUninitialized
    • 示例代码:
      app.use(session({
        secret: 'secret',
        resave: false,
        saveUninitialized: true
      }));
      
  6. 处理用户注册

    • 注册用户成功后,回调中的 user[0] 应改为 user.ops[0]
    • 示例代码:
      User.findOne({ username: req.body.username }, function(err, user) {
        if (err) return next(err);
        if (user) {
          req.flash('error', '用户名已存在');
          res.redirect('/');
        } else {
          var newUser = new User(req.body.user);
          newUser.save(function(err) {
            if (err) return next(err);
            req.flash('success', '注册成功');
            res.redirect('/');
          });
        }
      });
      

第3章 增加文件上传功能

  1. 配置 Multer

    • 使用 Multer 处理文件上传。
    • 示例代码:
      // index.js
      var multer  = require('multer');
      var storage = multer.diskStorage({
        destination: function (req, file, cb) {
          cb(null, './public/images');
        },
        filename: function (req, file, cb) {
          cb(null, file.fieldname + '-' + Date.now());
        }
      });
      
      var upload = multer({ storage: storage });
      
      app.post('/upload', checkLogin, upload.array('photos', 12), function (req, res) {
        req.flash('success', '文件上传成功!');
        res.redirect('/upload');
      });
      
  2. 修改表单字段名

    • 所有 file 输入字段的 name 属性应改为 photos
    • 示例代码:
      <!-- upload.ejs -->
      <input type="file" name="photos" multiple>
      

第14章 增加头像

  • 如果 http://www.gravatar.com 被墙了,可以将其替换为 http://gravatar.duoshuo.com

第15章 增加转载功能和转载统计

  • 给转载链接注册路由响应时,不需要调用 Post.edit()

我的 blog

  • 你可以查看我的 blog 实现 这里

一转眼竟然 express 都 4.8 了,没注意。

我还在用3.5…不忍直视

人工置顶

版本变化太快了,买的书又废了

顶一下。。。

koa2出了。。。最后一次更新

正在写研究blog,很有参考性,thanks

以下是关于“Nodejs express4.8之microblog学习笔记”的补充内容,基于你提供的信息:

第1章 一个简单的博客

问题与解决方案

  1. 设置DEBUG环境变量

    • 问题:使用set DEBUG=express:* node ./bin/www设置DEBUG环境变量后,输出的信息太多。
    • 解决方案:可以直接运行npm start。在bin/www里的debug('Listening on ' + bind)下面添加console.log('Listening on ' + bind)来替代。
  2. 服务器位置

    • 问题:建议不要把创建服务器的代码移到app.js中。
    • 解决方案:保持创建服务器的代码在bin/www里,这样结构更清晰。
  3. 开发工具

    • 问题:建议替换supervisornodemon
    • 解决方案:安装nodemon,然后用nodemon ./bin/www启动项目。
  4. 中间件顺序

    • 问题app.use(flash())应该在app.use(session({}))之前调用。
    • 解决方案:确保session中间件在flash之前。
  5. session配置

    • 问题:使用express-session时,控制台提示配置中最好设置resavesaveUninitialized
    • 解决方案:在session配置中明确设置这两个参数:
      app.use(session({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: true
      }));
      
  6. 注册用户成功后的回调

    • 问题:注册用户成功后,回调函数中的user[0]可能不会返回正确的数据。
    • 解决方案:使用user.ops[0]来获取正确的新用户对象。

第3章 增加文件上传功能

示例代码

var multer = require('multer');

// 配置multer存储策略
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './public/images');
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname);
  }
});

var upload = multer({ storage: storage });

// 处理上传请求
app.post('/upload', checkLogin, upload.array('photos', 12), function (req, res) {
  req.flash('success', '文件上传成功!');
  res.redirect('/upload');
});

以上是对于“Nodejs express4.8之microblog学习笔记”的部分内容进行的总结和补充,希望对你有所帮助。

回到顶部