软录 · 2022年11月30日

expressappjs路由|nodejs express 路由设置网页跳转

Ⅰ nodejs 的express框架每增加一个页面或ajax异步请求都需要需要在app.js中添加路由吗

可以把这些路由写在一个js里边,导出要用的路由,然后再app中引用就好。

比如有个你版在test.js中写了权好多路由并导出:

mole.exports=function(app){app.get('/a',function(req,res){});app.get('/b',function(req,res){});}

然后在app中require这个js文件,就好了

vartest=require("./routes/test.js);test(app);

Ⅱ express怎么获取当前路由

方法/步骤1全局安装2个模块express、express-generator在命令行输入: npm install -g expressnpm install -gexpress-generator查看是否全局安装express成功命令: express -V 注意是大写的V;或者 express -h看到版本号就算是安装成功了.2使用express生成项目基本框架命令: express xxx,4.x版本的express默认页面模板引擎是jade,如果想用ejs,命令应该是这样的: express -e xxx然后下载好基本模块.各个文件夹和文件介绍:bin下的www是项目入口node_mols 项目所需模块public 静态资源,如图片,js,cssroutes 路由文件views 页面模板app.js 项目需要的中间件等基本配置package.json 定义项目的基本信息等,包括项目所需要的模块名和版本号3查看项目运行效果命令:npm start浏览器输入 http://localhost:3000/4个人理解路由有两种设计方式: 串行和并行.两种方式可以交叉使用先讲并行比较简单点,项目改造如下:1,在routes文件夹下分别创建router1.js,router2.js,router3.js文件2,在 app.js 的 var users = require('./routes/users'); 后面插入代码var router1 = require('./routes/router1'); var router2 = require('./routes/router2'); var router3 = require('./routes/router3'); 3,在 app.js 的 app.use('/users', users); 后面插入代码app.use('/router1', router1); app.use('/router2', router2); app.use('/router3', router3); 5router1.js ,router2.js ,router3.js代码 router1.jsvar express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/a', function(req, res, next) { res.render('index', { title: 'Express 路由1' }); }); mole.exports = router; router2.jsvar express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/a', function(req, res, next) { res.render('index', { title: 'Express 路由2' }); }); mole.exports = router;router3.jsvar express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/a', function(req, res, next) { res.render('index', { title: 'Express 路由3' }); }); mole.exports = router; 3个路由下都有一个处理 路径为 '/a' 的方法6访问效果如下:看到这里应该都明白并行路由的使用了. 访问路径为router1下的所有的方法都由router1.js这个路由文件处理,同理 router2,router3,这种方式适合项目中不同的模块或者不同的系统使用.7串行路由设计在router1.js里加了一个.use方法表示所有满足的url都必须先经过这个方法才能往下走.在后面加入了2个路由router1.jsvar express = require('express'); var router = express.Router(); router.use(function (req, res, next) { console.log('经过路由1'); next(); }) /* GET home page. */ router.get('/a', function(req, res, next) { res.render('index', { title: 'Express 路由1' }); }); var router11 = require('./router11.js'); router.use(router11); var router12 = require('./router12.js'); router.use(router12); mole.exports = router; router11.jsvar express = require('express'); var router = express.Router(); router.use(function (req, res, next) { console.log('经过路由11'); if (req.query.data == 11) { next(); } else { res.render('index', { title: '路由11提醒 : 你没有权限访问!' }); } }) /* GET home page. */ router.get('/b', function(req, res, next) { res.render('index', { title: '路由11提醒 : 访问成功!' }); }); mole.exports = router; router12.jsvar express = require('express'); var router = express.Router(); router.use(function (req, res, next) { console.log('经过路由12'); if (req.query.title == 12 ) { next(); } else { res.render('index', { title: '路由12提醒 : 你没有权限访问!' }); } }) /* GET home page. */ router.get('/c', function(req, res, next) { res.render('index', { title: '路由12提醒 : 访问成功!' }); }); mole.exports = router; 分别访问不同的url可以看到不同的效果,http://localhost:3000/router1/ahttp://localhost:3000/router1/b http://localhost:3000/router1/b?data=11http://localhost:3000/router1/chttp://localhost:3000/router1/c?data=11http://localhost:3000/router1/c?data=11&title=12访问最后一个url的截图,其他的可自行实践.串行路由适合做权限控制,在use方法里写判断.越后面的路由权限要求越高,必须满足前面所有路由的条件才能访问8思考:为什么先经过router11再经过router12,而不是相反的呢,或者随机的呢,因为 router1.js 定义路由的时候 router11先引用,router12后引用,如果把位置调换下,访问的顺序就是 router1 –rouger12– router11访问:http://localhost:3000/router1/b?data=11&title=12

Ⅲ express中怎样实现路由分离,看nodejs开发指南里遇到的一个问题

99%可能是express版本不一致问题,新版本使用的是app.use(app.router);一般你现在装的Express为3.x版本,而大多数的教程所说的express为2.x版本。安装2.x版本: npm install [email protected]或者到这里看新版本的教程:http://expressjs.com/

Ⅳ Express路由匹配问题,怎么写

路由路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成,它的结构如下: app.METHOD(path, [callback…], callback), app 是 express 对象的一个实例, METHOD 是一个 HTTP 请求方法, path 是服务器上的路径, callback 是当路由匹配时要执行的函数。下面是一个基本的路由示例:var express = require('express'); var app = express(); // respond with "hello world" when a GET request is made to the homepage app.get('/', function(req, res) { res.send('hello world'); }); 路由方法路由方法源于 HTTP 请求方法,和 express 实例相关联。下面这个例子展示了为应用跟路径定义的 GET 和 POST 请求:// GET method route app.get('/', function (req, res) { res.send('GET request to the homepage'); }); // POST method route app.post('/', function (req, res) { res.send('POST request to the homepage'); }); Express 定义了如下和 HTTP 请求对应的路由方法: get, post, put, head, delete, options, trace, , lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search, 和 connect。有些路由方法名不是合规的 JavaScript 变量名,此时使用括号记法,比如: app['m-search']('/', function …app.all() 是一个特殊的路由方法,没有任何 HTTP 方法与其对应,它的作用是对于一个路径上的所有请求加载中间件。在下面的例子中,来自 “/secret” 的请求,不管使用 GET、POST、PUT、DELETE 或其他任何 http 模块支持的 HTTP 请求,句柄都会得到执行。app.all('/secret', function (req, res, next) { console.log('Accessing the secret section …'); next(); // pass control to the next handler }); 路由路径路由路径和请求方法一起定义了请求的端点,它可以是字符串、字符串模式或者正则表达式。Express 使用 path-to-regexp 匹配路由路径,请参考文档查阅所有定义路由路径的方法。 Express Route Tester 是测试基本 Express 路径的好工具,但不支持模式匹配。查询字符串不是路由路径的一部分。使用字符串的路由路径示例:// 匹配根路径的请求 app.get('/', function (req, res) { res.send('root'); }); // 匹配 /about 路径的请求 app.get('/about', function (req, res) { res.send('about'); }); // 匹配 /random.text 路径的请求 app.get('/random.text', function (req, res) { res.send('random.text'); }); 使用字符串模式的路由路径示例: // 匹配 acd 和 abcd app.get('/ab?cd', function(req, res) { res.send('ab?cd'); }); // 匹配 abcd、abbcd、abbbcd等 app.get('/ab+cd', function(req, res) { res.send('ab+cd'); }); // 匹配 abcd、abxcd、abRABDOMcd、ab123cd等 app.get('/ab*cd', function(req, res) { res.send('ab*cd'); }); // 匹配 /abe 和 /abcde app.get('/ab(cd)?e', function(req, res) { res.send('ab(cd)?e'); }); 字符 ?、+、* 和 () 是正则表达式的子集,- 和 . 在基于字符串的路径中按照字面值解释。使用正则表达式的路由路径示例:// 匹配任何路径中含有 a 的路径: app.get(/a/, function(req, res) { res.send('/a/'); }); // 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等 app.get(/.*fly$/, function(req, res) { res.send('/.*fly$/'); }); 路由句柄可以为请求处理提供多个回调函数,其行为类似 中间件。唯一的区别是这些回调函数有可能调用 next('route') 方法而略过其他路由回调函数。可以利用该机制为路由定义前提条件,如果在现有路径上继续执行没有意义,则可将控制权交给剩下的路径。路由句柄有多种形式,可以是一个函数、一个函数数组,或者是两者混合,如下所示.使用一个回调函数处理路由:app.get('/example/a', function (req, res) { res.send('Hello from A!'); }); 使用多个回调函数处理路由(记得指定 next 对象):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!'); }); 使用回调函数数组处理路由: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('/example/c', [cb0, cb1, cb2]); 混合使用函数和函数数组处理路由:var cb0 = function (req, res, next) { console.log('CB0'); next(); } var cb1 = function (req, res, next) { console.log('CB1'); next(); } app.get('/example/d', [cb0, cb1], function (req, res, next) { console.log('response will be sent by the next function …'); next(); }, function (req, res) { res.send('Hello from D!'); }); 响应方法下表中响应对象(res)的方法向客户端返回响应,终结请求响应的循环。如果在路由句柄中一个方法也不调用,来自客户端的请求会一直挂起。

Ⅳ nodejs express 路由设置网页跳转

1、首先创建app.js,输入:

varexpress=require("express")

varport=process.env.PORT||3000

varapp=express()

app.set('views','./views')

app.set('viewengine','jade')

app.listen(port);

Ⅵ express nodejs怎么使用

Express 是一个简洁、灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。1.express组织结构app demo |—node_moles——用于安装本地模块。 |—public————用于存放用户可以下载到的文件,比如图片、脚本、样式表等。 |—routes————用于存放路由文件。 |—views————-用于存放网页的模板。 |—app.js————应用程序的启动脚本。 |—package.json——项目的配置文件。2..创建express服务器 //app.js文件var express = require('express');var app = express();//指定更目录显示的内容app.get('/', function(req, res){ res.send('Hello World');});//指定监听端口var server = app.listen(3000, function() { console.log('Listening on port %d', server.address().port);});运行nodejs应用程序/>node app.js3.中间件中间件(middleware)就是处理HTTP请求的函数.当一个HTTP请求进入服务器,服务器实例会调用第一个中间件,完成后根据设置,决定是否再调用下一个中间件.中间件的参数为:.四个的时候—第一个为错误处理,第二个为客户请求request,第三个为服务器响应respond,第四个为next中间件. 如function(error, request, response, next){}.三个的时候—第一个客户请求request,第二个为服务器响应respond,第三个为next中间件. 如function(request, response, next){}.两个的时候—第一个客户请求request,第二个为服务器响应respondfunction. 如function(request, response){}4.使用中间件useuse是express调用中间件的方法,它返回一个函数. app.use(function(request, response) { response.writeHead(200, { "Content-Type": "text/plain" }); response.end("Hello world!\n");});5.错误内容显示 app.use(express.bodyParser());//使用body参数app.use(express.methodOverride());//使用函数覆盖app.use(app.router);//使用路由app.use(function(err, req, res, next){ console.error(err.stack); res.send(500, 'Something broke!');});//错误内容显示6.路由express路由的方式有多种,这里举例常用的几种:.app.use('/', middleware);//get/post时,对于路径/的处理.app.get("/", middleware);//http中get时,对于路径/的处理.app.post("/", middleware);//http中post时,对于路径/的处理.app.put("/", middleware);//http中put时,对于路径/的处理.app.delete("/", middleware);//http中delete时,对于路径/的处理7.路径通配符*.*表示所有路径 app.get("*", function(request, response) { response.end("404!");});//所有路径都返回404.:捕获路径内容 app.get("/hello/:who", function(req, res) { res.end("Hello, " + req.params.who + ".");});//如"/hello/alice”网址,网址中的alice将被捕获,作为req.params.who属性的值8.设置环境变量setset用于指定变量的值.app.set("view engine", "ejs");//使用ejs作为模版9.response对象方法.重定向redirect response.redirect("/hello/anime");//重定向到/hello/anime.发送文件sendFile response.sendFile("/path/to/anime.mp4");.渲染网页模板render,即把变换的内容加载到网页. response.render("index", { message: "Hello World" });//将message变量传入index模板,值为"Hello World"渲染成HTML网页10.requst对象方法.获取客户ip地址:request.ip.获取上传的文件:request.files11.启动脚本package.jsonpackage.json用于指定app信息,nodejs版本号和其他组件的依赖关系 { "name": "demo", "description": "My First Express App", "version": "0.0.1", "dependencies": { "express": "3.x" }}12.app入口app.jsapp.js主要包含http的创建,基本路由,监听端口号13.动态网页模板viewsviews文件夹,用于存放所有的放网页模板. //app.jsapp.get('/', function(req, res) { res.render('index',{title:"最近文章"});});//index.jsthis is <%=title%>!14.指定静态网页目录//app.jsapp.use(express.static('public'));//指定静态网页目录,当浏览器发出非HTML文件请求时,服务器端就到public目录寻找这个文件如:<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">, 服务器端就到public/bootstrap/css/目录中寻找bootstrap.css文件

Ⅶ express 怎么在路由下渲染或者获取到其他文件下的html页面

express 在路由下来渲染或者获取源到其他文件下的html页面:express中支持的模版有.ejs和.jade,.ejs的和.html是一样的,只是.ejs是一个可以动态传值的模版,而html是一个静态页面。如果你想在views目录下的页面时.html的,那么,你需要在根目录中的app.js中这样设置// view engine setupapp.set('views', path.join(__dirname, 'views'));//注册ejs模板为html页。简单的讲,就是原来以.ejs为后缀的模板页,现在的后缀名可以//是.html了app.engine('.html', require('ejs').__express);//设置视图模板的默认后缀名为.html,避免了每次res.Render("xx.html")的尴尬app.set('view engine', 'html');

Ⅷ Express.js 中 app 中间件和 router 中间件的区别是什么

app的作用是做一些全局的处理(比如作用全局的中间件的引入等等),而router是开发人员做业务处理的利器(比如你可以通过router去use你自己写的针对某个特定路由的中间件),这样的好处可以更细的划分 controller,个人觉得他们两个之间有什么不同并不是特别重要,只要搞明白什么时候该用谁就OK了。

Ⅸ 在Express.js,app.render与res.render有什么区别

您可以致电app.render在根级别和res.render里面只有一个路由/中间件 2。app.render总是返回html而在回调函数res.render也因此,只有当你指定的回调函数作为你的第三个如果你打电话res.render没有第三放慢参数/回调函数被发送到客户端端用的一个代码200。来看看下面的例子app.renderapp.render('index', {title: 'res vs app render'}, function(err, html) { console.log(html)});// logs the following string (from default index.jade)<!DOCTYPE html><html><head><title>res vs app render</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>res vs app render</h1><p>Welcome to res vs app render</p></body></html>res.render没有第三app.get('/render', function(req, res) { res.render('index', {title: 'res vs app render'})})// also renders index.jade but sends it to the client // with status 200 and content-type text/html on GET /renderres.render与第三方app.get('/render', function(req, res) { res.render('index', {title: 'res vs app render'}, function(err, html) { console.log(html); res.send('done'); })})// logs the same as app.render and sends "done" to the client instead // of the content of index.jade3。res.render用途app.render内部渲染模板文件。 4。正如VeXii说你的render函数电子邮件。根据您的您的应用程序的结构,你可能并不总是有存取权限的app对象。例如内外部路由: app.jsvar routes = require('routes');app.get('/mail', function(req, res) { // app object is available -> app.render})app.get('/sendmail', routes.sendmail);routes.jsexports.sendmail = function(req, res) { // can't use app.render -> therefore res.render}

Ⅹ 为什么新版express启动入口文件由app.js换成了bin里面的www文件

我也是觉得SUI可以,之前看过别人把这两者结合的demo,现在也是在用vue结合sui重构 web,这是别人的那个demo地址GitHub-eteplus/vue-sui-demo:用vue和SUI-Mobile写了一个移动端demo,用来反馈学习vue的成果(禁用了SUI自带的路由,使用vue-router,vue-resource,webpack)[amobiledemoofvue]