问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

express js 可以做什么

发布网友 发布时间:2022-05-06 16:21

我来回答

2个回答

懂视网 时间:2022-05-14 16:05

var app = require("express")();

app.get("/", function(req, res, next){
 res.write("Hello");
 next();
});

app.get("/", function(req, res, next){
 res.write(" World !!!");
 res.end();
});

app.listen(8080);

这里第一个句柄写入一些响应,然后调用next()next()方法用于调用与路径路径匹配的下一个路由处理程序。

路由处理程序必须结束请求或调用下一个路由处理程序。

我们还可以将多个路由处理程序传递给app.all()app.get()app.post()app.delete()app.put()方法。

这是一个证明这一点的例子:
var app = require("express")();

app.get("/", function(req, res, next){
 res.write("Hello");
 next();
}, function(req, res, next){
 res.write(" World !!!");
 res.end();
});

app.listen(8080);

中间件

中间件是一个位于实际请求处理程序之上的回调。它采用与路由处理程序相同的参数。

要了解中间件,我们来看一个带有dashboardprofile页面的示例站点。要访问这些页面,用户必须登录。还会记录对这些页面的请求。

以下是这些页面的路由处理程序的代码:
var app = require("express")();

function checkLogin(){
 return false;
}

function logRequest(){
 console.log("New request");
}

app.get("/dashboard", function(req, res, next){

 logRequest();

 if(checkLogin()){
 res.send("This is the dashboard page");
 }
 else{
 res.send("You are not logged in!!!");
 }
});

app.get("/profile", function(req, res, next){

 logRequest();

 if(checkLogin()){
 res.send("This is the dashboard page");
 }
 else{
 res.send("You are not logged in!!!");
 }
});

app.listen(8080);

这里的问题是有很多重复的代码,即我们不得不多次使用logRequest()checkLogin()函数。这也使得更新代码变得困难。因此,为了解决这个问题,我们可以为这两条路径编写一条通用路径。

这是重写的代码:
var app = require("express")();

function checkLogin(){
 return false;
}

function logRequest(){
 console.log("New request");
}

app.get("/*", function(req, res, next){
 logRequest();
 next();
})

app.get("/*", function(req, res, next){
 if(checkLogin()){
 next();
 }
 else{
 res("You are not logged in!!!");
 }
})

app.get("/dashboard", function(req, res, next){
 res.send("This is the dashboard page");
});

app.get("/profile", function(req, res, next){
 res.send("This is the dashboard page");
});

app.listen(8080);

这里的代码看起来更清晰,更易于维护和更新。这里将前两个定义的路由处理程序称为中间件,因为它们不处理请求,而是负责预处理请求。

Express为我们提供了app.use()方法,该方法专门用于定义中间件。 app.use()方法可能看起来与app.all()类似,但它们之间存在很多差异,这使得app.use()非常适合于声明中间件。让我们看看app.use()方法是如何工作的:

app.use() 和 app.all() 的不同:

CALLBACK

app.use()只需要一个回调,而app.all()可以进行多次回调。

PATH

app.use()只查看url是否以指定路径开头,app.all()匹配完整路径。

这里有一个例子来说明:
app.use( "/product" , mymiddleware);
// will match /product
// will match /product/cool
// will match /product/foo

app.all( "/product" , handler);
// will match /product
// won't match /product/cool <-- important
// won't match /product/foo <-- important

app.all( "/product/*" , handler);
// won't match /product <-- Important
// will match /product/cool
// will match /product/foo

NEXT()

中间件内的next()调用下一个中间件或路由处理程序,具体取决于接下来声明的那个。但是路由处理程序中的next()仅调用下一个路由处理程序。如果接下来有中间件,则跳过它。因此,必须在所有路由处理程序之前声明中间件。

这里有一个例子来说明:

var express = require('express');
var app = express();

app.use(function frontControllerMiddlewareExecuted(req, res, next){
 console.log('(1) this frontControllerMiddlewareExecuted is executed');
 next();
});

app.all('*', function(req, res, next){
 console.log('(2) route middleware for all method and path pattern "*", executed first and can do stuff before going next');
 next();
});

app.all('/hello', function(req, res, next){
 console.log('(3) route middleware for all method and path pattern "/hello", executed second and can do stuff before going next');
 next();
});

app.use(function frontControllerMiddlewareNotExecuted(req, res, next){
 console.log('(4) this frontControllerMiddlewareNotExecuted is not executed');
 next();
});

app.get('/hello', function(req, res){
 console.log('(5) route middleware for method GET and path patter "/hello", executed last and I do my stuff sending response');
 res.send('Hello World');
});

app.listen(80);

现在我们看到了app.use()方法的唯一性以及它用于声明中间件的原因。

让我们重写我们的示例站点代码:
var app = require("express")();

function checkLogin(){
 return false;
}

function logRequest(){
 console.log("New request");
}

app.use(function(req, res, next){
 logRequest();
 next();
})

app.use(function(req, res, next){

 if(checkLogin()){
 next();
 }
 else{
 res.send("You are not logged in!!!");
 }
})

app.get("/dashboard", function(req, res, next){
 res.send("This is the dashboard page");
});

app.get("/profile", function(req, res, next){
 res.send("This is the dashboard page");
});

app.listen(8080);

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript视频教程栏目!

热心网友 时间:2022-05-14 13:13

Express 是基于 Node.js 平台,快速、开放、极简的 web 开发框架。

Web 应用
Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
API
丰富的 HTTP 快捷方法和任意排列组合的 Connect 中间件,让你创建健壮、友好的 API 变得既快速又简单。
性能
Express 不对 Node.js 已有的特性进行二次抽象,只是在它之上扩展了 Web 应用所需的基本功能。

具体能做什么,你可以参考下面的连接
http://www.cnblogs.com/hyddd/p/4237099.html
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何理解“时间就是空间,空间就是时间”? 办公室副主任竞聘演讲稿范文 学校办公室主任竞聘演讲稿范文 最新办公室主任竞聘演讲稿 办公室主任竞聘演讲稿优秀范文 ...堆墨现象,墨线 接地和粘度都正常,请问应如何解决 ...都正常了开始喷印结果喷一条墨线好恐怖怎么解决呀各位老师 威力喷码机 求一份学生会演讲词 大学学生会个人优秀演讲稿 怎么开机自动运行搜狗拼音输入法? 在b612星球,猴面包树的树苗和什么很像? 小王子最后是被蛇咬死了,尸体被风沙掩埋,还是如安托万所说,他回到了B612星球,我觉得他是被蛇咬死 612谐音是什么意思 Visual Studio.net2008下载地址大神们帮帮忙 在小王子书中小王子住在b612星球,但点解小王子要离开他的星球? b612星球存在吗 Microsoft Visual C++ 2008 Express Edition是永久免费的吗?? 一直相信小王子住的星球——b612号小行星的存在&#xF463; express和commuicate用法区别 COM Express Type 6计算模块,什么是COM Express Type 6计算模块 com express,Qseven,ETX,ATX等计算机标准的差别和行业不同应用 高中物理有什么好的复习方法啊! 中国农历新年由来 贡布新年的来历是什么? 入党自荐书怎么写啊‘ 查询中国银行社保卡激活方式有哪些? 藏历新年的由来及演变? 藏历新年的推算方法和由来 我的中国银行储蓄卡没有激活,但是公司的工资打进来了,怎么查询余额 农行公众号预约办理业务 预约了还需要排队吗 冰箱空开绕过总开关和不绕过的区别 农业银行柜台问题,需要排队吗? 农行银卡办业务能不排队吗? 农行办业务排号过时还需重新排吗 白天做梦捡到钱了什么意思啊 我是农行金卡,办理业务需要抽号排队吗? 难道农行网银也要排队? 农行金卡是否不用排队办理业务 银行办理业务须重新填表后需重新排队办理业务吗? 到农业银行办理业务不要排队的卡是什么卡 现在农行卡要排队吗? 白天下午睡觉做梦,梦见自己连续捡到钱,刚开始捡一百,几十的,后来捡着... 绩效反馈与面谈的目的是什么?如何提高绩效反馈与面谈的质量 绩效反馈的定义 绩效反馈的目标 9.简述360度绩效反馈的信息来源包括那几个方面。 10.简述绩效反馈面谈有什么目的。 销售人员绩效反馈面谈的目的有哪些 2绩效考评后为什么要开展绩效反馈?(写不少于100字 简述如何进行有效的绩效反馈