javascript笔记之express初体验

Express简介

首先,express是node下用于写路由的的一个框架,安装
npm install express
一个简单的使用app.js

var express=require('express')
var app=express()
var server=app.listen(port||3000) //开一个端口,默认3000
app.get('/',function(req,res){
    res.send('hello,world!')
})

运行app.js,这时候打开浏览器,127.0.0.1/3000就能显示hello world

Express路由方法

app.get('/',function(req,res){
//get主要用于客户端向服务器请求,因此一般写response
     res.send()
})
app.post('/',function(req,res){
//post主要用于客户端提交数据给服务器
})
app.all('/',function(req,res){
//all可以处理任何get,post,delete,put
})

说说路由句柄

一个简单的

app.get('/example/a', function (req, res) {
  res.send('Hello from A!');
});

具有回调函数的句柄

app.get('/example/b', function (req, res, next) {
  console.log('response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from B!');
});

这里next()方法就是回调

回调数组
先定义几个函数

var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}

var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}

var cb2 = function (req, res) {
  res.send('Hello from C!');
}
//这里定义的app.get()函数,第一个参数是路由路径,第二个参数是一个数组[cb0,cb1,cb2],里面是三个函数。
app.get('/example/c', [cb0, cb1, cb2])
//console输出CB0,CB1 ,网页显示Hello from C!

几种响应方法

  • **res.send()** 发送各种类型的响应。
  • **res.render()** 渲染视图模板
  • **res.redirect()** 重定向
  • **res.json()** 发送JSON格式的响应
  • **res.download()** 提示下载文件
  • 等等

这里就写res.render(),其他的感觉也不常用,具体就看官方API文档吧

语法
res.render(view [, locals] [, callback])
渲染一个视图,并把html传给客户端

locals: 本地定义的属性
callback:回调函数,返回的异常err和html

//官网上的例子
// 发送渲染的视图给客户端
res.render('index');

// 如果指定了回调函数,那么渲染的HTML必须显示的发送
res.render('index', function(err, html) {
  res.send(html);
});

// 传送一个本地的变量给视图
res.render('user', { name: 'Tobi' }, function(err, html) {
  // ...
});

app.set()

app.set(name, value)

将value设置为name,估计是为了方便使用吧,我是这么理解的

app.set('title', 'My Site');
app.get('title'); // "My Site"

app.js

var express=require('express')
var port=process.env.PORT||3001
var app=express()
app.listen(port,function(){
    console.log('listen'+port)
})


app.set('env', 'production');
console.log('app.js', app.get('env'));//production

var routes = require('./routes/index');
app.use('/routes', routes);

./routes/index.js

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
    console.log(req.app.get('env'));//production

    res.send(req.app.get('env')); //production
});

module.exports = router;

这里写图片描述
app.use()
难点来了,一直搞不明白的,上面的例子也是用了app.use,就从上面的代码说起吧,app.use()其实就相当于一个中间件。
app.use([path,] function [, function…])
第一个参数是路径名,第二个参数是函数

就说上面的例子,app.js里 app.use(‘/routes’, routes);
当客户端输入localhost:/routes 时,实则是跳转到 ./routes/index.js 去执行
所以app.use就是这个意思吧
app.use 加载用于处理http請求的middleware(中间件),当一个请求来的时候,会依次被这些 middlewares处理。

执行的顺序是你定义的顺序,比如文档上的例子:

var logger = require('morgan');

app.use(logger());
app.use(express.static(__dirname + '/public'));
app.use(function(req, res){
  res.send('Hello');
});

这个就不会记录静态文件的日志,因为looger中间件在static中间件后面。

app.use(express.static(__dirname + '/public'));
app.use(logger());
app.use(function(req, res){
  res.send('Hello');
});

之前在想express有什么大不了,不就是写路由嘛,现在感觉有些方法深入去研究还是很麻烦,唉,只能边做边学了。

你可能感兴趣的:(nodejs,express)