@IT·互联网程序员Web前端之路

Node.js-Express

2017-04-14  本文已影响102人  baiying

Express是这么定义自己的:一个轻量灵活的Node.js web 应用框架。

启动服务器

使用原Node.js中的http模块

const http = require("http");
http.createServer( (req,res)=> {
    res.end("hello");  //浏览器打开localhost:3000会看到hello
}).listen(3000, ()=> {
    console.log("3000");  //提示信息,可以忽略
});

使用Express框架

let express  = require("express")
let app = new express();
app.get('/',(req,res)=>{
    res.send("world");
})
app.listen(3000,()=>{
    console.log("listining 3000 port");
})

其实调用express()生成的app是一个函数,是作为了http中createServer的参数,调用app.listen()其实执行的是http.createServer(app).listen()。

Express核心之中间件(middleware)

//普通中间件形式:
function middlewareName(req, res, next) {
// do something
}
//错误处理中间件形式
function middlewareName(err, req, res, next) {
// do something
}

函数中的res和req分别指请求的response和request,err指错误信息,next本身也是一个函数,调用next()就会执行下一个中间件。

app.use('/user', function(req, res, next) {
// do something
});
app.get('/user', function(req, res, next) {
// do something  //get方法可以用post,put,delete等替代
});

Express router

router也是express中很重要的一个东西,简单来说它是一个中间件的容器,app的很多API,例如:app.use(),app.param(),app.handle()等,事实上都是对Router的API的一个简单包装。
看下面的例子:

let express  = require("express")
let app = new express();
let router  = express.Router();
router.get("/hello",(req,res)=>{
    res.send("hello");   //浏览器中打开http://localhost:3000/router/hello会看到hello
})
router.get("/hi",(req,res)=>{
    res.send("hi")  //浏览器中打开http://localhost:3000/router/hi会看到hi
})
app.use("/router",router);
app.listen(3000,()=>{
    console.log("listining 3000 port");
})

那么问题来了,前边我没有用router,直接实例化一个express对象app,然后去写中间件,不是照样可以完成请求响应么,我目前在找了很多资料后是这样理解的,一般我们会用app.use()去定义应用程序级的根路由,router.Method()去定义子路由,多个子路由都是以那个根路由为开始的。

上一篇下一篇

猜你喜欢

热点阅读