nodejs开发指南中,microblog微博系统的开发相关

1. 安装ejs模板的命令有问题,安装不成功

因为在express3.X以下版本中, -t命令参数已经失效
express -t ejs microblog
需改成:

express -e microblog

2. 直接运行node app.js启动不了项目

express4.x+版本都是使用npm start命令来启动项目了,同时也将原来用于项目启用的代码移动到 自动创建的.bin/www这个文件中了

所以直接运行npm start来快速启动项目,或者node bin/www,或者监控代码:supervisor bin/www , 如下:

nodejs开发指南中,microblog微博系统的开发相关_第1张图片

node bin/www示例图

nodejs开发指南中,microblog微博系统的开发相关_第2张图片

3. 使用partial片段视图报错:

express4.*已经放弃使用partial模块,改用 include 了
改动:
list.ejs:

<ul>
<% items.forEach(function(item){ %>
    <% include listitem %>
<% }) %>
ul>

listitem.ejs:

<li>
    <%= item %>
li>

nodejs开发指南中,microblog微博系统的开发相关_第3张图片

4. 视图助手问题(在视图中设置一个全局函数或对象或变量):

app.helper和app.dynamicHelpers 分别为express2.X所使用的静态视图和动态视图助手函数。

在express3.X后,这两个方法被废除,使用的是locals方法,用法如下:

app.locals({
    key1: value1,
    key2: value2
});

即:

app.locals({
    inspect: function(obj){
        return util.inspect(obj, true);
    }
});

在express4.X 后,locals使用方式,如下:

app.locals.key1 = value1;
app.locals.key2 = value2;

即:

app.locals.inspect = function(obj){
    return util.inspect(obj, true);
}

5. 设置NODE_ENV 环境变量问题

app.js 添加:

console.log("环境变量=" + process.env.NODE_ENV);

可打印出当前的运行模式(1.devlopment 开发模式-利于调试;2.production 产品模式-利于部署).)

cmd 命令行 :
nodejs开发指南中,microblog微博系统的开发相关_第4张图片

6. 使用express的morgan模块,添加日志功能

app.js :

var fs = require('fs');
var logger = require('morgan');// morgan中间件记录日志
var moment = require('moment');// 时间格式化(文件模块)
// 1日志文件(可不提前新建access.log和error.log, 执行时,会自动在项目根目录下生成。)
var accessLogfile = fs.createWriteStream('access.log', {flags: 'a'});// 1请求日志
var errorLogfile = fs.createWriteStream('error.log', {flags: 'a'});// 2错误日志

app.use(logger('combined', {stream: accessLogfile}));// 1-将请求信息存在文件中-
//...app.js最后面添加异常处理...
// 1-开发模式
// 1-404错误处理
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// 1-error handler,500错误处理,
/* ps:这个500处理,是app.js中默认的开发模式//处理方式,在添加下面产品模式的50处理时,要将开发模式的500处理注释掉。*/
/*app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});*/

// 2-产品模式 500异常处理
app.use(function (err, req, res, next) {
    // console.log(" req.app.get('env')=="+ req.app.get('env'));
    var meta = '[' + moment(new Date()).format('YYYY-MM-DD HH:mm:ss') + ']' + req.url + '\n';
    errorLogfile.write(meta + err.stack + '\n');
    next();
});

index.js中添加500异常测试:

router.get('/', function(req, res, next) {
  // res.render('index', { title: '首页' });
    throw new Error('发生一个错误啦...');// 500异常测试
     Post.get(null, function (err, posts) {
         if(err){
             posts = [];
         }
         res.render('index', {
             title: '首页',
             posts: posts
         })
     })
});

access.log:
access示例图

error.log:
nodejs开发指南中,microblog微博系统的开发相关_第5张图片

源码地址:https://gitee.com/minimey/microblog.git

你可能感兴趣的:(node.js)