偷窥Nodejs-简单总结
发布于 2年前 作者 nourlcn 5276 次浏览

原文发布日期:08 Oct 2012

原文地址:http://blog.ownlinux.net/2012/10/learn-nodejs-dev.html

介绍一本书

一时好奇,想看看Node到底是什么东东,于是乎买了一本书,《Node.js开发指南》。因为不懂JavaScript,不懂如何设计界面,也不懂什么异步变成,学Node几乎是从0开始。而这书正是从安装配置、基础、事件、异步等讲起,进而讲express,用一个例子展示了如何用node开发web应用,使用了bootstrap建立网站框架(这也是我想了解的东西),最后谈谈JavaScript的高级特性。综合个方面,这书,很适合我。

遇到的问题及解决方式

  • 使用connect-mongdo时,报错:Cannot read property ‘Store’ of undefined

解决: require(‘connect-mongo’)的时候加一个参数express,如下:

    var express = require('express');
    var MongoStore = require('connect-mongo')(express),
  • 使用app.use(express.router(routers)) 提示 has no method ‘router’

解决:原因可能是express 3.0后没有了router这个方法,继续使用之前的app.use(app.router),在app.js末尾加入:

    routers(app);

(这样routes/inndex.js 可以继续使用书中的书写格式.)

  • req调用flash时报错,TypeError: Object #<IncomingMessage> has no method ‘flash’

查看express的issues发现,flash在3.0+后的版本中已经不支持了。见这里

  • Express中路径控制,如果url中需要参数:
app.get('/user/:username',function(req,res){res.send('your content');});
  • 使用dynamicHelpers时,app(req, res){ app.handle(req, res); } has no method ‘dynamicHelpers’

一些有用的链接

更多文章…

21 回复

你好,我在工程的app.js中加入了
var flash = require(‘connect-flash’); app.configure(function(){ … app.use(flash()); }; 但是在router文件夹中的index.js包中依然报错, TypeError: Object #<IncomingMessage> has no method ‘flash’ 请教下,能否告诉怎么解决?

@panpan107324 试一下把app.use(flash())加到app.configure上面试一下

@feDaniel 加到上面 flash方法都不提示~

@panpan107324 那报错报什么呢?

@feDaniel enter image description here 这个是路由控制器文件,中间画横线的地方不报错,但是也不显示应有的效果

@panpan107324 你没有传入success,error,user,当然没有显示应有的效果

   res.render('reg',{
        title:'User Register',
        layout:'layout',
  
        user:req.session.user,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()

    }); 

@feDaniel 旧版本的写法req.flash('error', err),在新版本中是这样的:res.locals.error = err;

用了router(app) 后报错显示router未定义怎么办呢?谢谢

是不是router这个包名字写错了~ 自带的定义应该是routes

@leizongmin res.locals.error=err;这样写当然可以,不过新版本也有这样的写法吧req.flash('error’,err),我的写法是这样的:https://github.com/FE-Daniel/microblog/blob/master/routes/index.js

@feDaniel @leizongmin 两位大虾,我是想在点击“注册”的时候,显示这个错误,所以应该不能直接在res.render中传入success和error吧? @leizongmin 请问下,req.flash和res.locals.error这两种写法怎么用?后一种在新版本中能够实现第一种的效果吗? //app.js enter image description here //index.js enter image description here

@panpan107324 恩恩,解决了!谢谢

@panpan107324 1、我没用过2.x版本的express,所以req.flash()的作用不是很清楚; 2、3.x版本的express中,以下代码是等价的:

res.locals.error = 'error';
res.render('template');

res.render('template', {
  error: 'error'
});

@leizongmin 恩,明白了,谢谢啊~~~刚学这个几天,碰到n多问题 flash的作用应该就是显示方式不一样,声明方式不一样吧?

@panpan107324 纠正一下,我的第一个回复有误。 req.flash('name', value)在新版本中是这样的req.session.name = value,其作用应该是设置session吧。 关于2.x到3.x的变化,自己仔细看看这里吧:https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x

@leizongmin 多谢多谢,学习了~~以后还多多请教!

不错不错,express版本升级导致的问题真的很麻烦啊

使用dynamicHelpers时,app(req, res){ app.handle(req, res); } has no method ‘dynamicHelpers’ 这个方法的解决办法是用res.locals那具体怎么操作,在哪个页面中添加,我直接加在app中报res not define,加在layout.ejs中也是为定义,请问怎么解决啊??

The book is old , you can npm install old express 2.x .


签名: 交流群244728015 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3

我也是在看来以上两个链接后感觉自己入门了。直接使用的最新版本,没有遇到楼主这些问题。

@brighthas 在不安装express 2.x的情况下,3.x怎么解决啊??

回到顶部