1、supervisor 可以帮助你实现这个功能,它会监视你对代码的改动,并自动重启 Node.js。
使用方法很简单,首先使用 npm 安装 supervisor:
2、app.js是工程的入口,里面负责定义路由控制器
routes/index.js 是路由控制器文件 用于组织展示的内容
3、index.ejs 是模板文件 即routes/index.js中调用的模版
4、app.get('/hello', routes.hello);
固定的路径设置路由规则
5、
app.get('/user/:username', function(req, res) {
res.send('user: ' + req.params.username);
});
高级的路由匹配模式
6、app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
模版引擎,表明要是用的模版引擎是 ejs,模版的位置在 views子目录下
在routes/index.js的exports.index函数中通过语句来调用模版引擎:
res.render('index', {title: 'Express'})
res.render的作用就是调用模版引擎,并将结果返回给浏览器客户端,它接受的两个参数
第一个参数是模版的名称,第二个参数是模版里面要转换过来的数据,用与模版翻译
ejs的标签系统只有三种:<% code %> 表示javascript代码,
<%= code %> 显示转换过HTML特殊字符的内容
<%- code %> 显示原始HEML内容
7、layout.ejs 是一个网页布局模版,一般页眉页脚等重复比较多的会在这个模版里面来写,
也可以关闭模版功能,
在app.js中app.configure中layout: false
另一种情况就是,一个项目可能有多个网页布局模版,前台或者后台,
也可以在模版翻译的时候制定布局模版
res.render('userlist', {
title: '用户列表后台管理系统',
layout: 'admin'
});
8、从 http://twitter.github.com/bootstrap/下载 Twitter Bootstrap
从 http://jquery.com/ 下载一份最新版的 jquery.js
-------------------------------------------------------------------------------------------
////////////////////////////Node.js建立项目////////////////////////////////////////////////
-------------------------------------------------------------------------------------------
1、安装Express框架,
$ npm install -g express //全局安装
$ npm install -g express -generator //这段命令可别忘了,不然会提示“express命令找不
到的”
2、创建工程
express -e microblog //即ejs,-j(即jade)(Express 4.0出来之后老的命令改变了)
3、创建依赖
cd microblog //microblog为前面创建工程的文件夹
npm install
4、启动项目
npm start
5、关闭服务器 连着按两个Ctrl + C。
项目的入口文件 app.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
6、app.set是Express的参数设置工具,接受一个键(Key)一个值(Value)
可用参数如下:
basepath:基础地址,通常用于res.redirect()跳转
views:视图文件目录,存放模版文件
view engine:视图模版引擎
view options:全局视图参数对象
view catch : 启用视图缓存
case sensitive routes:路径是否区分大小写
strict routing:严格路径,启用后不会忽略路径末尾的 "/"
jsonp callback:开启透明的jsonp支持
7、Express依赖与connect,提供了大量的中间件,用app.use来启用。
bodyParser的功能是解析客户端请求,通常是通过POST传送的内容。
8、
app.use('/', routes);
app.use('/users', users);
是一个路由控制器,如果请求是访问"/"路径,则会转到'./routes/index'来控制。
9、app.listen(3000); 启动,监听3000端口。该app.js中没有写到,会默认端口为3000
在 /bin/ 目录下的文件 "www" 中,
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
.
.
.
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
10、 routes/index.js是路由文件,相当于控制器,
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
11、index.ejs 是模板文件,即 routes/index.js 中调用的模板。内容是:
<h2><%= title %></h2>
<p>Welcome to <%= title %></p>
12、layout.ejs
默认情况下所有的模板都继承自 layout.ejs,即 <%- body %>
部分才是独特的内容,其他部分是共有的,可以看作是页面框架。
13、 app.js 中并没有一个路由规则指派到 /stylesheets/style.css,但 app 通过
app.use(express.static(path.join(__dirname, 'public'))); 配置了静态文件服务器,因此
/stylesheets/style.css 会定向到 app.js 所在目录的子目录中的文件 public/stylesheets/style.css,
14、重新写一个Hello控制器
1)在app.js里面添加:
app.use('/hello', routes);
2)在index.js里面添加
router.get('/hello', function(req, res, next) {
res.send('The time is ' + new Date().toString());
});
这两个文件相互照应着。页面就出来了