javascript笔记之express初体验

来源:互联网 发布:js仿京东商品详情 编辑:程序博客网 时间:2024/05/16 19:11

Express简介

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

var express=require('express')var app=express()var server=app.listen(port||3000) //开一个端口,默认3000app.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||3001var app=express()app.listen(port,function(){    console.log('listen'+port)})app.set('env', 'production');console.log('app.js', app.get('env'));//productionvar 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有什么大不了,不就是写路由嘛,现在感觉有些方法深入去研究还是很麻烦,唉,只能边做边学了。

0 0
原创粉丝点击