安装 Nodejs

Nodejs官网根据自己的操作系统下载对应的安装包并安装。我们就有了NodeJS和npm环境。npm是Node的包管理工具,会在安装NodeJS时一并安装。可以用以下命令查看版本号验证我们的安装成功与否:

  1. sunjingdeMacBook-Pro:microblog sunjing$ node -v
  2. v0.12.2
  3. sunjingdeMacBook-Pro:microblog sunjing$ npm -v
  4. 2.7.4

安装 express-generator

我们使用express作为开发框架,与1版不同,新版的express已经不可以使用:

  1. express -t ejs microblog

来快速建立网站结构,而是要额外安装express-generator来生成网站框架。

  1. npm install -g express-generator

'-g' 参数表示全局安装,这样我们就可以直接在命令行上使用了。

创建项目

创建框架

在要存放项目的目录打开终端或命令行,使用以下命令建立网站框架:

  1. express -e microblog

'-e' 参数表示使用ejs作为模板引擎,如不加会默认使用jade。
执行命令后会看到如下结果:

  1. sunjingdeMacBook-Pro:~ sunjing$ express -e microblog
  2.  
  3. create : microblog
  4. create : microblog/package.json
  5. create : microblog/app.js
  6. create : microblog/public
  7. create : microblog/public/javascripts
  8. create : microblog/public/images
  9. create : microblog/public/stylesheets
  10. create : microblog/public/stylesheets/style.css
  11. create : microblog/routes
  12. create : microblog/routes/index.js
  13. create : microblog/routes/users.js
  14. create : microblog/views
  15. create : microblog/views/index.ejs
  16. create : microblog/views/error.ejs
  17. create : microblog/bin
  18. create : microblog/bin/www
  19.  
  20. install dependencies:
  21. $ cd microblog && npm install
  22.  
  23. run the app:
  24. $ DEBUG=microblog:* ./bin/www

编辑依赖项

打开项目目录,找到package.json文件,将其中的依赖项修改如下,在默认的依赖项里添加上我们后面将会用到的一些模块。

  1. "dependencies": {
  2. "body-parser": "~1.12.0",
  3. "cookie-parser": "~1.3.4",
  4. "debug": "~2.1.1",
  5. "ejs": "~2.3.1",
  6. "express": "~4.12.2",
  7. "express-session":"*",
  8. "morgan": "~1.5.1",
  9. "serve-favicon": "~2.2.0",
  10. "mongodb":"*",
  11. "connect-mongo":"*",
  12. "connect-flash":"*",
  13. "log4js":"*"
  14. }

关于依赖项版本号的书写规则可以查看Difference between tilde(~) and caret(^) in package.json,需要注意的是虽然前面我们已经全局安装了express-generator,这里我们仍然需要本地安装express模块。

安装依赖项

好啦,现在可以安装我们上面列出的依赖项了,在项目目录里运行如下命令,即会多出来一个node_modules目录,存放了各依赖模块。

  1. sunjingdeMacBook-Pro:microblog sunjing$ npm install

运行项目

在新的express框架下,1版上用的

  1. node app.js

启动命令已经不再适用,要改用

  1. sunjingdeMacBook-Pro:microblog sunjing$ npm start
  2.  
  3. > microblog@0.0.0 start /Users/sunjing/microblog
  4. > node ./bin/www

为什么呢?因为在package.json中有这样配置

  1. "scripts": {
  2. "start": "node ./bin/www"
  3. }

所以用 npm start 命令等同于:

  1. sunjingdeMacBook-Pro:microblog sunjing$ node ./bin/www

  

我们后面使用forever管理进程的时候还会提到这里。
这时候我们已经可以在浏览器里用3000端口http://localhost:3000/查看我们的网站页面了。

打开 app.js

  1. var express = require('express');
  2. var path = require('path');
  3. var favicon = require('serve-favicon');
  4. var logger = require('morgan');
  5. var cookieParser = require('cookie-parser');
  6. var bodyParser = require('body-parser');
  7.  
  8. var routes = require('./routes/index');
  9. var users = require('./routes/users');
  10.  
  11. var app = express();
  12.  
  13. // view engine setup
  14. app.set('views', path.join(__dirname, 'views'));
  15. app.set('view engine', 'ejs');
  16.  
  17. // uncomment after placing your favicon in /public
  18. //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  19. app.use(logger('dev'));
  20. app.use(bodyParser.json());
  21. app.use(bodyParser.urlencoded({ extended: false }));
  22. app.use(cookieParser());
  23. app.use(express.static(path.join(__dirname, 'public')));
  24.  
  25. app.use('/', routes);
  26. app.use('/users', users);
  27.  
  28. // catch 404 and forward to error handler
  29. app.use(function(req, res, next) {
  30. var err = new Error('Not Found');
  31. err.status = 404;
  32. next(err);
  33. });
  34.  
  35. // error handlers
  36.  
  37. // development error handler
  38. // will print stacktrace
  39. if (app.get('env') === 'development') {
  40. app.use(function(err, req, res, next) {
  41. res.status(err.status || 500);
  42. res.render('error', {
  43. message: err.message,
  44. error: err
  45. });
  46. });
  47. }
  48.  
  49. // production error handler
  50. // no stacktraces leaked to user
  51. app.use(function(err, req, res, next) {
  52. res.status(err.status || 500);
  53. res.render('error', {
  54. message: err.message,
  55. error: {}
  56. });
  57. });
  58.  
  59. module.exports = app;

app.js

其中

  1. var routes = require('./routes/index');
  2. var users = require('./routes/users');

表示引用routes文件夹下的index.js和users.js

  1. app.use('/', routes);
  2. app.use('/users', users);
  1. // 挂载至 / 的中间件,任何指向 / 的请求都会执行它
  2.  
  3. // 挂载至 /users 的中间件,任何指向 /users 的请求都会执行它
  1. 这里还有应用级中间件、路由级中间件(区别待查。。。欢迎交流)
    应用级中间件

应用级中间件绑定到 app 对象 使用 app.use() 和 app.METHOD(), 其中, METHOD 是需要处理的 HTTP 请求的方法,例如 GET, PUT, POST 等等,全部小写。例如:

  1. var app = express();
  2.  
  3. // 没有挂载路径的中间件,应用的每个请求都会执行该中间件
  4. app.use(function (req, res, next) {
  5. console.log('Time:', Date.now());
  6. next();
  7. });
  8.  
  9. // 挂载至 /user/:id 的中间件,任何指向 /user/:id 的请求都会执行它
  10. app.use('/user/:id', function (req, res, next) {
  11. console.log('Request Type:', req.method);
  12. next();
  13. });
  14.  
  15. // 路由和句柄函数(中间件系统),处理指向 /user/:id 的 GET 请求
  16. app.get('/user/:id', function (req, res, next) {
  17. res.send('USER');
  18. });

app.use

    路由级中间件

路由级中间件和应用级中间件一样,只是它绑定的对象为 express.Router()

  1. var app = express();
  2. var router = express.Router();
  3.  
  4. // 没有挂载路径的中间件,通过该路由的每个请求都会执行该中间件
  5. router.use(function (req, res, next) {
  6. console.log('Time:', Date.now());
  7. next();
  8. });
  9.  
  10. // 一个中间件栈,显示任何指向 /user/:id 的 HTTP 请求的信息
  11. router.use('/user/:id', function(req, res, next) {
  12. console.log('Request URL:', req.originalUrl);
  13. next();
  14. }, function (req, res, next) {
  15. console.log('Request Type:', req.method);
  16. next();
  17. });
  18.  
  19. // 一个中间件栈,处理指向 /user/:id 的 GET 请求
  20. router.get('/user/:id', function (req, res, next) {
  21. // 如果 user id 为 0, 跳到下一个路由
  22. if (req.params.id == 0) next('route');
  23. // 负责将控制权交给栈中下一个中间件
  24. else next(); //
  25. }, function (req, res, next) {
  26. // 渲染常规页面
  27. res.render('regular');
  28. });
  29.  
  30. // 处理 /user/:id, 渲染一个特殊页面
  31. router.get('/user/:id', function (req, res, next) {
  32. console.log(req.params.id);
  33. res.render('special');
  34. });
  35.  
  36. // 将路由挂载至应用
  37. app.use('/', router);

router.use

初次使用并安装express的更多相关文章

  1. 【node.js】本地模式安装express:'express' 不是内部或外部命令,也不是可运行的程序或批处理文件。

    今天闲来无事想起了node.js,因此到网上下载了一个node.js的安装程序进行安装.其中: 安装程序:node-v0.11.13-x64.msi PC系统:Windows 7 自定义安装路径:D: ...

  2. Win8.1 安装Express 框架

    1.安装Windows Node.js客户端 2.安装Express框架 我本机是Win8.1的,使用命令npm install -g express安装Express,安装完成后显示一些安装明细,刚 ...

  3. 【安装Express】CentOS7 下安装NodeJs+Express+MongoDB+Redis

    上一篇介绍了一下怎么安装Nodejs,那么这一篇就说说怎么安装express,express有个中文站点非常非常方便,http://www.expressjs.com.cn/创建express框架的站 ...

  4. nodejs安装express不是内部或外部命令

    工具/原料  Node.js安装包 方法/步骤  首先下载Node.js安装包,此处我用的是官方最新的v0.10.27 32位版: http://nodejs.org/dist/v0.10.27/no ...

  5. nodejs学习笔记一:安装express框架并构建工程目录

    偶遇node是在一个阳光明媚的上午,无意间打开博客看到一片关于nodejs的介绍,通读全篇后,心情跌宕起伏,哎呀,这么好的东西我竟然现在才知道,这是最气的,于是马上开始制定学习nodejs计划,好了, ...

  6. 安装express后却找不到express的命令

    1.全局安装express npm install -g express 2.执行express命令,创建web项目框架 express -e ejs myweb 会提示 express 不是内部或外 ...

  7. Nodejs新建博客练习(一)安装express并新建项目

    安装express npm install -g express-generator 新建工程 express blog //新建项目 cd blog && npm install / ...

  8. node.js在windows下的学习笔记(6)---安装Express

    Express是什么呢? express.js是nodejs的一个MVC开发框架,并且支持jade等多种模板.对于WEB应用程序而言,会有许多诸如模板和路由这样的公共模式在的,虽然也可以自己编写代码解 ...

  9. nodejs安装express遇到的坑

    网上很多资料都是npm install express -g; 安装完也不报错,但使用express的时候却报找不到命令: 在网上查了好多,最后用 npm install -g express-gen ...

随机推荐

  1. WPF -Enum的三种绑定方法

    一.使用ObjectDataProvider <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat ...

  2. NUOJ 88

    思路1: 找规律,本题若是直接暴力搜索,就是f(n)=2^n-1,然后f(n)%1000000,那么结果会越界:所以考虑用f(n+1)=(2*f(n)+1)%1000000,不过遇到较大数据的时候,会 ...

  3. 第九章 JQUI

    一.什么是插件 ①是遵循一定接口规范编写的程序 ②是原有系统平台功能的扩展和补充 ③只能运行在规定的系统平台下,而不能单独运行 注:由于jQuery插件是基于jQuery脚本库的扩展,所以所有jQue ...

  4. poj[2104]K-th Number

    Description You are working for Macrohard company in data structures department. After failing your ...

  5. three.js添加文字

    添加文字需要用到fontLoader,测试貌似只能异步.在success中回调. 对于中文字体,需要将ttf格式转换为json格式或者是js格式之后才能使用,不过一般转换之后的文件比较大.建议使用Fo ...

  6. javascript正则表达式:匹配所有html标签

    此正则表达式收集于网络,但那个网站连复制一下都需要注册会员,鄙视之,所以不提他了.而且,原作者也不可能是那个网站. html标签有<h1></h1>这种成对的,也有<br ...

  7. javascript数据类型判断

    javascript基本数据类型:原始类型  和  引用类型 原始类型(简单数据类型):String,Number,Boolean,Undefined,Null,Symbol(ES6新增) 引用类型( ...

  8. 1122Shell脚本之利用mysqldump备份MySQL数据库

    #!/bin/bash #Mysql 自动备份 压缩并上传到 指定ftp #设想每天凌晨3点备份mysql #编辑crontab配置文件 #00 03 * * * backupmysql.sh #压缩 ...

  9. Webpack 中文指南

    来源于:http://webpackdoc.com/index.html Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资 ...

  10. Chrome-Console( Command Line API Reference)

    来源于:https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference The Comma ...