node.js express 学习 (一) hello world

由于博主使用的是 win7 操作系统,所以有个地方要提一下,如果你的系统账户不是管理员账户(也就是说你安装软件的时候会弹出是否以管理员身份运行的选项)的话,那么在安装之前需要先以管理员身份运行 cmd.exe 或 npm , 否则执行 npm install 命令的时候有些东西由于权限的问题不会成功安装。

# 安装 express
E:node>npm install express

# 查看 express 版本 (如果没有以管理员身份安装就可能找不到 express)
E:node>express -V
3.4.8

# 新建一个测试实例
E:node>express mySite

   create : mySite
   create : mySite/package.json
   create : mySite/app.js
   create : mySite/public
   create : mySite/public/images
   create : mySite/routes
   create : mySite/routes/index.js
   create : mySite/routes/user.js
   create : mySite/views
   create : mySite/views/layout.jade
   create : mySite/views/index.jade
   create : mySite/public/javascripts
   create : mySite/public/stylesheets
   create : mySite/public/stylesheets/style.css

   install dependencies:
     $ cd mySite && npm install

   run the app:
     $ node app

# 安装 express 的模板引擎
E:node>npm install jade

# 运行 express
E:nodemySite>node app
Express server listening on port 3000

如果运行 express 实在是找不到命令,就考虑用全路径吧:

E:node>node E:nodenode_modulesexpressbinexpress mySite

   create : mySite
   create : mySite/package.json
   create : mySite/app.js
   create : mySite/public
   create : mySite/public/images
   create : mySite/routes
   create : mySite/routes/index.js
   create : mySite/routes/user.js
   create : mySite/views
   create : mySite/views/layout.jade
   create : mySite/views/index.jade
   create : mySite/public/javascripts
   create : mySite/public/stylesheets
   create : mySite/public/stylesheets/style.css

   install dependencies:
     $ cd mySite && npm install

   run the app:
     $ node app

弹出的提示说目前server 已经在 3000 端口上运行了,那么这个时候就已经可以打开浏览器访问 http://localhost:3000 或者 http://127.0.0.1:3000

当你看到 “Welcome to Express” 字样的时候表示你已经成功搭建了一个 express 站点。

目前 express 默认示例的 mySite/app.js 代码是:

/**
 * Module dependencies.
 */

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// 环境配置
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

// 路由配置
app.get('/', routes.index);
app.get('/users', user.list);

// 开启服务
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

根据路由配置,我们知道有两个路径是可以访问的:
一个是 http://127.0.0.1:3000 即默认的根目录 ‘/’
还有一个是 http://127.0.0.1:3000/users 即 ‘/users’

我们可以访问 http://127.0.0.1:3000/users 看下, 页面上显示 respond with a resource。 这个地方

根据:
var user = require(‘./routes/user’);
app.get(‘/users’, user.list);

可以找到在 /routes/user.js

/*
 * GET users listing.
 */

exports.list = function(req, res){
  res.send("respond with a resource");
};

这里面的参数 req 是 request 的简写,即客户端发上来的请求
res 是 response 的简写,是服务端的响应。
res.send(“respond with a resource”); 是指服务端下发一个字符串,内容就是刚才页面上看到的了。

你也可以修改一下这个字符串看看,不过需要注意的时候修改之后,node app 需要重新启动一次(这个可以通过一些模块来解决重启的问题)。

Advertisements

npm 安装出现 UNMET DEPENDENCY 的解决方案

npm install express -g
...
npm list -g
D:UsersLsAppDataRoamingnpm
└─┬ express@3.4.8
  ├── buffer-crc32@0.2.1
  ├─┬ commander@1.3.2
  │ └── keypress@0.1.0
  ├─┬ connect@2.12.0
  │ ├── UNMET DEPENDENCY batch 0.5.0
  │ ├── UNMET DEPENDENCY bytes 0.2.1
  │ ├── UNMET DEPENDENCY multiparty 2.2.0
  │ ├── UNMET DEPENDENCY negotiator 0.3.0
  │ ├── UNMET DEPENDENCY pause 0.0.1
  │ ├── UNMET DEPENDENCY qs 0.6.6
  │ ├── UNMET DEPENDENCY raw-body 1.1.2
  │ └── UNMET DEPENDENCY uid2 0.0.3
  ├── cookie@0.1.0
  ├── cookie-signature@1.0.1
  ├── debug@0.7.4
  ├── fresh@0.2.0
  ├── merge-descriptors@0.0.1
  ├── methods@0.1.0
  ├── mkdirp@0.3.5
  ├── range-parser@0.0.4
  └─┬ send@0.1.4
    └── mime@1.2.11

npm ERR! missing: batch@0.5.0, required by connect@2.12.0
npm ERR! missing: bytes@0.2.1, required by connect@2.12.0
npm ERR! missing: pause@0.0.1, required by connect@2.12.0
...
npm ERR! not ok code 0

今天安装一些模块的时候发现 npm install 到了一个点之后就卡住了一样等了半天一直不动,接着中断看了下出现安装出现了 UNMET DEPENDENCY 的 模块,这个时候如果重新 install 一便的话,又会重头开始,如果又碰到卡壳就很烦。

查了一下发现是跟旧版 npm 有关的问题: https://github.com/isaacs/npm/issues/1341#issuecomment-20634338

方案一

rm -rf node_modules/    # 删除已安装的模块
npm cache clean         # 清除 npm 内部缓存
npm install             # 重新安装

方案二

rm -rf node_modules/    # 删除已安装的模块
sudo npm update -g npm  # 更新 npm
npm install             # 重新安装

方案三

npm list 命令查看之后跑到缺失模块的目录下, 手动修复部分出错的模块:

$ npm list -g
D:UsersLsAppDataRoamingnpm
└─┬ express@3.4.8
  ├── buffer-crc32@0.2.1
  ├─┬ commander@1.3.2
  │ └── keypress@0.1.0
  ├─┬ connect@2.12.0
  │ ├── UNMET DEPENDENCY batch 0.5.0
  │ ├── UNMET DEPENDENCY bytes 0.2.1
  │ ├── UNMET DEPENDENCY multiparty 2.2.0
  │ ├── UNMET DEPENDENCY negotiator 0.3.0
  │ ├── UNMET DEPENDENCY pause 0.0.1
  │ ├── UNMET DEPENDENCY qs 0.6.6
  │ ├── UNMET DEPENDENCY raw-body 1.1.2
  │ └── uid2@0.0.3
  ├── cookie@0.1.0
  ├── cookie-signature@1.0.1
  ├── debug@0.7.4
  ├── fresh@0.2.0
  ├── merge-descriptors@0.0.1
  ├── methods@0.1.0
  ├── mkdirp@0.3.5
  ├── range-parser@0.0.4
  └─┬ send@0.1.4
    └── mime@1.2.11

npm ERR! missing: batch@0.5.0, required by connect@2.12.0
npm ERR! missing: qs@0.6.6, required by connect@2.12.0
npm ERR! missing: bytes@0.2.1, required by connect@2.12.0
npm ERR! missing: pause@0.0.1, required by connect@2.12.0
npm ERR! missing: raw-body@1.1.2, required by connect@2.12.0
npm ERR! missing: negotiator@0.3.0, required by connect@2.12.0
npm ERR! missing: multiparty@2.2.0, required by connect@2.12.0
npm ERR! not ok code 0

可以 cd 到具体出问题的模块目录下手动 npm install 重新安装也可以解决.