当前位置: 首页 > 后端技术 > Node.js

expressweb的mvc框架

时间:2023-04-03 13:10:33 Node.js

expressexpress相关网站*http://expressjs.com/*http://www.expressjs.com.cn/*https://github.com/pugjs/pug*https//pug.bootcss.com/api/g...Web开发常用的MVC(模型(数据层)视图(视图层)控制器(控制层))框架有四种。今天说说express*express*koa*阿里的egg框架*thinkjsexpress()Express是一个功能极简的web开发框架,完全由路由和中间件组成。安装并创建一个目录$mkdirmyapp$cdmyapp为您的应用程序使用npminit命令创建一个package.json文件。$npminit然后我们需要在该目录下创建一个app.js文件,然后安装Express并保存到依赖列表:$npminstallexpress--saveHelloworldinstanceapp.jsvarexpress=require('express');//导入模块varapp=express();//调用函数app.get('/',function(req,res){res.send('HelloWorld!');});//请求HelloWorld!varserver=app.listen(3000,function(){varhost=server.address().address;varport=server.address().port;console.log('Exampleapplisteningathttp://%s:%s',主机,端口);});//启动并运行以下命令$nodeapp.js然后在浏览器中打开http://localhost:3000/并查看输出。express应用生成器可以通过应用生成器工具express快速创建一个应用脚手架。命令行安装$npminstallexpress-generator-g在当前工作目录下创建一个名为myapp1的应用程序。(与myapp同级别)$expressmyapp安装依赖项:$cdmyapp$npminstall启动这个应用程序(MacOS或Linux平台):$DEBUG=myappnpmstartWindows平台使用以下命令:setDEBUG=myapp&npmstart然后在浏览器中打开http://localhost:3000/URL可以看到expressrouting的应用。路由是指如何定义应用程序的端点(URI)以及如何响应客户端请求。我们可以在routes文件夹下新建一个文件。order.js来详细说一下路由的用法。order.jsvarexpress=require('express');varrouter=express.Router();router.get('/',function(req,res,next){res.render('order',{msg:'我的订单'});});router.get('/list',function(req,res,next){res.send('orderlist');});module.exports=router;app.jsvarorder=require('./routes/order');//引入roder.jsapp.use('/order',order);Express模板引擎(本博客开头有一个关于pug(jade)的网站)rendertemplatefiles:*views,放置模板文件的目录,例如:app.set('views','./views')*viewengine,模板引擎,例如:app.set('viewengine','jade')然后安装对应的模板引擎npm包。$npminstalljade--save$npminstallejs--save如果需要,在app.set('viewengine','jade')中将'jade'更改为那种。在views目录下生成一个名为order.jade的Jade模板文件,内容如下:doctypehtmlhtmlheadtitleorderbodyh1#{msg}然后使用routing渲染:router.get('/',function(req,res,nest){res.render('orders',{msg:'orderhomepage'})})Express托管静态文件通过Express内置的express.static,可以方便的托管静态文件,比如图片,CSS、JavaScript文件等。将静态资源文件所在目录作为参数传递给express.static中间件,提供对静态资源文件的访问。例如,假设图像、CSS和JavaScript文件放在public目录下,你可以:app.use(express.static('public'));如果你的静态资源存放在多个目录下,可以多次调用express.static中间件:app.use(express.static('public'));app.use(express.static('files'));可以通过目录下以“/static”为前缀的文件地址访问public。http://localhost:3000/static/images/kitten.jpghttp://localhost:3000/static/css/style.csshttp://localhost:3000/static/js/app.jshttp://localhost:3000/static/images/bg.pnghttp://localhost:3000/static/hello.html中间件中间件(Middleware)是一个函数,可以访问请求对象(requestobject(req))、响应对象(responseobject(res))、以及Web应用中请求-响应循环过程中的中间件,一般命名为next变量。中间件的功能包括:*执行任何代码。*修改请求和响应对象。*终止请求-响应循环。*调优中间件类型:*应用级中间件*路由级中间件*错误处理中间件*内置中间件*第三方中间件应用级中间件应用级中间件使用app.use()和app对象绑定app.METHOD(),其中METHOD为要处理的HTTP请求的方法,如GET、PUT、POST等,均为小写。例如:varapp=express();//没有中间件挂载路径,应用每次请求都会执行中间件app.use(function(req,res,next){console.log('Time:',Date.now());next();});//中间件挂载到/user/:id,任何指向/user/:id的请求都会执行它app.use('/user/:id',function(req,res,next){console.log('RequestType:',req.method);next();});//路由和处理函数(中间件系统),处理指向/userGET请求for/:idapp.get('/user/:id',function(req,res,next){res.send('USER');});在下面的示例中,指向/user/的GET请求:id定义了两条路由。第二条路线虽然没有引起任何问题,但从未被调用,因为第一条路线已经终止了请求-响应循环//处理对/user/:id的GET请求的中间件堆栈app.get('/user/:id',function(req,res,next){console.log('ID:',req.params.id);next();},function(req,res,next){res.send('用户信息');});//处理/user/:id,打印出用户idapp.get('/user/:id',function(req,res,next){res.end(req.params.id);});如果需要跳过中间件栈中剩余的中间件,调用next('route')方法将控制权转移到下一个路由。注意:next('route')仅对使用app.VERB()或router.VERB()加载的中间件有效。路由级中间件路由级中间件和应用级中间件一样,只是它绑定的对象是express.Router()。varrouter=express.Router();使用router.use()或router.VERB()加载的路由器类。varapp=express();varrouter=express.Router();//没有中间件挂载路径,每次通过这个路由的请求都会执行中间件router.use(function(req,res,next){console.log('Time:',Date.now());next();});//显示对/user/:id的任何HTTP请求的中间件堆栈router.use('/user/:id',function(req,res,next){console.log('请求URL:',req.originalUrl);next();},function(req,res,next){console.log('请求类型:',req.method);next();});//处理指向/user/:idrouter.get('/user/:id',function(req,res,next){//的GET请求的中间件栈如果用户id为0,则跳转到下一个路由if(req.params.id==0)next('route');//负责将控制传递给栈中的下一个中间件elsenext();//},function(req,res,next){//渲染一个普通页面res.render('regular');});//处理/user/:id,渲染一个特殊的页面router。get('/user/:id',function(req,res,next){console.log(req.params.id);res.render('special');});//挂载到应用的路由app.use('/',路由器);错误处理中间件错误处理中间件与其他中间件定义类似,只是它使用4个参数而不是3个,其签名如下:(err,req,res,next)。app.use(function(err,req,res,next){console.error(err.stack);res.status(500).send('Somethingbroke!');});内置中间件express.static(root,[options])express.static是Express唯一的内置中间件。它基于serve-static,负责为Express应用程序中的静态资源提供服务。参数root指的是提供静态资源的根目录。以下示例使用express.static中间件,其中选项对象经过精心设计。var选项={dotfiles:'ignore',etag:false,extensions:['htm','html'],index:false,maxAge:'1d',redirect:false,setHeaders:function(res,path,stat){res.set('x-timestamp',Date.now());}}app.use(express.static('public',options));第三方中间件用于Express应用,通过使用第三方中间件添加更多的功能。安装具有所需功能的节点模块并将其加载到应用程序中,可以在应用程序级别或在路由级别。我们在写进程管理器的程序时,发现每次改一个文件,都需要在命令行停止当前服务,然后输入npmstart,非常麻烦。我们需要一个自动刷新工具pm2安装:npminstallpm2-gdstartpm2start./bin/www--watchPSD:\node.js\code\0505\myapp2>pm2start./bin/www--watch┌───────────┬──────┬────────┬────────┬──────────────────────────────────┬────────┬──────┬──────────────┬───────────────────────────────────────────────────────────────────────────────────────┐│应用名称│id│mode│pid│status│restart│uptime│cpu│mem│user│watching├──────────┼──────┼────────┼──────────┼────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────┼────────────┤│www│0│fork│17480│在线│0│0s│0%│24.1MB│lenovo│enabled│└────────────┴──────┴──────┴────────┴──────────┴──────────┴──────┴────┴──────┴──────────────┴────────────┴──────────────┘使用`pm2show`获取应用程序的更多详细信息当显示状态为在线时,表示程序启动成功。现在打开http://localhost:3000就可以看到正在运行的程序了。停止应用:pm2stop0restartpm2restart0显示程序信息pm2show0删除程序pm2delete0查看程序列表pm2list这是一些express的基本内容,喜欢的话点个赞走吧。