原文发布日期: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’
一些有用的链接
- nodebeginer 一本短小的Node入门电子书
- Felix Geisendörfer的大作Understanding node.js
你好,我在工程的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 这个是路由控制器文件,中间画横线的地方不报错,但是也不显示应有的效果
@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 //index.js
@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怎么解决啊??