首页 >> js开发 >> jsNode Express用法详解【安装、使用、路由、中间件、模板引擎等】js大全
jsNode Express用法详解【安装、使用、路由、中间件、模板引擎等】js大全
发布时间: 2021年1月13日 | 浏览:
| 分类:js开发
本文实例讲述了Node Express用法。分享给大家供大家参考,具体如下:安装
npm install --save express
npm install --save express基本使用
//引用express
var express = require('express');
//创建app
var app = express();
//罗列中间件
app.get('/',function( req,res ){
res.send('index');
});
app.get('/new/:id',function( req,res ){
res.send('news'+ res.params.id);
});
//开启服务器,监听端口
app.listen(3000);
//引用express
var express = require('express');
//创建app
var app = express();
//罗列中间件
app.get('/',function( req,res ){
res.send('index');
});
app.get('/new/:id',function( req,res ){
res.send('news'+ res.params.id);
});
//开启服务器,监听端口
app.listen(3000);
路由express 路由express 路由
//路由小写和大写都可以。
var express = require('express');
var app = express();
app.get('/',function( req,res ) {
res.send('get请求');
});
app.post('/',function( req,res ){
res.send('post请求');
});
app.listen(1221);
//路由小写和大写都可以。
var express = require('express');
var app = express();
app.get('/',function( req,res ) {
res.send('get请求');
});
app.post('/',function( req,res ){
res.send('post请求');
});
app.listen(1221);
get和post请求都可以
app.all('/',function( req,res ){
res.send('get&post');
});
// 更推荐冒号写法
app.get('/student/:id',function( req,res ){});
app.get('/:username/:id',function( req,res ){ res.write(username); res.end(id) });
app.all('/',function( req,res ){
res.send('get&post');
});
// 更推荐冒号写法
app.get('/student/:id',function( req,res ){});
app.get('/:username/:id',function( req,res ){ res.write(username); res.end(id) });
有字符串正则系统
// 匹配 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');
});
// 匹配 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/');
});
// 路由中的正则表达式,可以使用分组捕获,程序中使用req.params[0],req.params[1]来获取
app.get(/student([\d]{1})\/class([\d]{2})$/,function( req,res ){
console.log( req.params[0],req.params[1] );
});
// 匹配任何路径中含有 a 的路径:
app.get(/a/, function(req, res) {
res.send('/a/');
});
// 路由中的正则表达式,可以使用分组捕获,程序中使用req.params[0],req.params[1]来获取
app.get(/student([\d]{1})\/class([\d]{2})$/,function( req,res ){
console.log( req.params[0],req.params[1] );
});
表单提交表单提交到本身页面 // restful 路由设计
/*
概念:
/student
get // 读取学生信息
// app.get('/student/:id',function(){});
add // 添加学生信息
// app.add('/student/:id',function(){});
delete // 删除学生信息 // app.delete('/student/:id',function(){});
问题:web网页中,大部分处理get和psot请求处理。
其它的服务,可以是从软件,或者app发出请求。一般restful是提供给app。
*/
app.get('/',function( req,res ){
res.render('form.ejs');
});
app.post('/',function( req,res ){
res.send('form表单提交');
});
/*
概念:
/student
get // 读取学生信息
// app.get('/student/:id',function(){});
add // 添加学生信息
// app.add('/student/:id',function(){});
delete // 删除学生信息 // app.delete('/student/:id',function(){});
问题:web网页中,大部分处理get和psot请求处理。
其它的服务,可以是从软件,或者app发出请求。一般restful是提供给app。
*/
app.get('/',function( req,res ){
res.render('form.ejs');
});
app.post('/',function( req,res ){
res.send('form表单提交');
});中间件中间件middleware ,少了一层回调。
所有的中间件,都将作为http.createServer();的回调。middlewarehttp.createServer();中间件特点:app.js中的代码,程序执行的时候运行,用户来了之后,并不执行。中间件中的代码块,每个用户访问的时候都会执行一次。具有跳楼现象,从上往下走,匹配一个就执行,而不会执行第二个。
app.get('/',function( req,res ){ res.send('A') });
app.get('/',function( req,res ){ res.send('B') });
//执行A,而不会执行B
app.get('/',function( req,res ){ res.send('A') });
app.get('/',function( req,res ){ res.send('B') });
//执行A,而不会执行B中间件的回调函数中有next参数,表示继续执行下一个匹配的中间件。 //利用next(),用两段小程序,来同时处理同一个请求。 把业务分开。 next() , 影响MVC。
app.get('/',function( req,res,next ){
res.send( 'A' );
next();
})
app.get('/',function( req,res,next ){
res.send( 'B' );
})
//这两个路由,感觉没关系,实际上冲突了。
app.get('/:username/:id',function( req,res ){
console.log(1);
res.send('用户信息'+ req.params[username]);
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
app.get('/',function( req,res,next ){
res.send( 'A' );
next();
})
app.get('/',function( req,res,next ){
res.send( 'B' );
})
//这两个路由,感觉没关系,实际上冲突了。
app.get('/:username/:id',function( req,res ){
console.log(1);
res.send('用户信息'+ req.params[username]);
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
解决方法方法1:
调整路由上下位置 //利用匹配就有跳楼现象。 express 中 所有的路由 都是中间件,具体的路由往上写,抽象的往下写。具体的路由往上写,抽象的往下写
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
app.get('/:username/:id',function( req,res ){
console.log(1);
res.send('用户信息'+ req.params[username]);
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
app.get('/:username/:id',function( req,res ){
console.log(1);
res.send('用户信息'+ req.params[username]);
});
方法2: 匹配到最后,要有最终的路由来匹配于它。
//加上next()之后,匹配两次,已经被send()一次,会报错。通过数据的判断适当加next()
app.get('/:username/:id',function( req,res ){
var username = req.paramse.username;
//检索数据库,如果username不存在,那么才next()
if( usernma ) {
console.log(1);
res.send('用户信息'+ req.params[username]);
} else {
next();
}
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
//加上next()之后,匹配两次,已经被send()一次,会报错。通过数据的判断适当加next()
app.get('/:username/:id',function( req,res ){
var username = req.paramse.username;
//检索数据库,如果username不存在,那么才next()
if( usernma ) {
console.log(1);
res.send('用户信息'+ req.params[username]);
} else {
next();
}
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
app.use()此时并不会进行任何路由匹配,都是执行。一般处理404,和总体的返回编码和状态的使用。
// 多个路由都能够匹配
app.use('/admin',function( req,res ){
console.log(req.originUrl); // '/admin/new'
console.log(req.baseUrl); // 'admin'
console.log(req.path); // '/new'
next();
});
// 任何网址都是 '/' 的拓展
app.use('/',function( req,res ){});
app.use(function( req,res ){}); // 可以不用第一个参数 直接就是 '/',就是所有网址了。
app.use(); //增加一些特定功能的便利场所。
// 实际上app.use(); //基本上都从第三方能得到。 -- 路由顺序(落路)
app.use(user);
function user( req,res,next ){
var filePath = req.originalUrl;
fs.readFile('./public/'+filePath,function( err,data ){
if( err ){
//文件不存在
next()
return ;
}
res.send(data.toSting());
});
}
// 静态服务
app.use(express.static('./public'));
// 路由的上下关系,很有关系, 是否匹配第一个,是否需要next()
// 一般习惯把静态服务写在前头,后面的路由处理,一般不冲突。
// 返回编码和状态
app.use(function( req,res,next ){
res.status(200);
res.set('Content-Type','text/html;charset=utf-8');
next();
});
//404
app.use(function( req,res ){
res.status(404);
res.send('sorry');
});
// 多个路由都能够匹配
app.use('/admin',function( req,res ){
console.log(req.originUrl); // '/admin/new'
console.log(req.baseUrl); // 'admin'
console.log(req.path); // '/new'
next();
});
// 任何网址都是 '/' 的拓展
app.use('/',function( req,res ){});
app.use(function( req,res ){}); // 可以不用第一个参数 直接就是 '/',就是所有网址了。
app.use(); //增加一些特定功能的便利场所。
// 实际上app.use(); //基本上都从第三方能得到。 -- 路由顺序(落路)
app.use(user);
function user( req,res,next ){
var filePath = req.originalUrl;
fs.readFile('./public/'+filePath,function( err,data ){
if( err ){
//文件不存在
next()
return ;
}
res.send(data.toSting());
});
}
// 静态服务
app.use(express.static('./public'));
// 路由的上下关系,很有关系, 是否匹配第一个,是否需要next()
// 一般习惯把静态服务写在前头,后面的路由处理,一般不冲突。
// 返回编码和状态
app.use(function( req,res,next ){
res.status(200);
res.set('Content-Type','text/html;charset=utf-8');
next();
});
//404
app.use(function( req,res ){
res.status(404);
res.send('sorry');
});
render() & send()大多数情况下,渲染内容用res.render(),将会根据views的模板文件进行渲染,如果不想使用views文件夹,使用其它名字,res.render()
app.set('views','static');
app.set('views','static');
send(); //自动设置了Content-Type 头部和200状态码。和 mime类型。 send() 和 end() 一样。
send(); //自动设置了Content-Type 头部和200状态码。和 mime类型。 send() 和 end() 一样。get & postget请求的参数在url中,在原生node中,需要使用url模块来识别参数字符串,在express中,不需要使用url模块。可以直接使用req.query对象。req.querypost请求在express中不能直接获得,必须使用body-parser模块。使用后,将可用req.body得到参数。但是如果表单中含有文件上传,那么还是需要使用formidable模块。body-parserreq.bodyformidable模块post使用到的第三方模块:body-parser,formidablebody-parserformidable
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
// 设置模板
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({ extended: false }));
// router
app.get('/',function( req,res ){
res.render('form.ejs');
});
app.post('/',function( req,res ){
console.log(req.body);
});
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
// 设置模板
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({ extended: false }));
// router
app.get('/',function( req,res ){
res.render('form.ejs');
});
app.post('/',function( req,res ){
console.log(req.body);
}); 静态化文件利用expres.static(root); // root 参数指的是静态资源文件所在的根目录。expres.static(root);
// app.use方法实际上是将中间件保存在一个数组中,注册路由时,依次将数组的元素取出
app.use(express.static('./static'));
app.use('page',epxress.static('./static')); // page/index.html
// app.use方法实际上是将中间件保存在一个数组中,注册路由时,依次将数组的元素取出
app.use(express.static('./static'));
app.use('page',epxress.static('./static')); // page/index.html 模板引擎和 express 结合的模板是:jade,ejs
(ejs)[https://www.npmjs.com/package/ejs%5Djadeejshttps://www.npmjs.com/package/ejs%5D
var express = require('express');
var app = express();
// 设置模板引擎,设置为ejs
app.set('view engine','ejs');
// 路由
app.get('/',function( req,res ){
//render: 第二个参数是,字典。
res.render('index.ejs',{
'name': [ting,daie]
});
});
app.listen(1221);
var express = require('express');
var app = express();
// 设置模板引擎,设置为ejs
app.set('view engine','ejs');
// 路由
app.get('/',function( req,res ){
//render: 第二个参数是,字典。
res.render('index.ejs',{
'name': [ting,daie]
});
});
app.listen(1221);
对应的模板为:
默认的视图文件夹,views。如果不想使用默认的 app.set('views','./shitu');viewsapp.set('views','./shitu');希望本文所述对大家node.js程序设计有所帮助。
npm install --save express
npm install --save express基本使用
//引用express
var express = require('express');
//创建app
var app = express();
//罗列中间件
app.get('/',function( req,res ){
res.send('index');
});
app.get('/new/:id',function( req,res ){
res.send('news'+ res.params.id);
});
//开启服务器,监听端口
app.listen(3000);
//引用express
var express = require('express');
//创建app
var app = express();
//罗列中间件
app.get('/',function( req,res ){
res.send('index');
});
app.get('/new/:id',function( req,res ){
res.send('news'+ res.params.id);
});
//开启服务器,监听端口
app.listen(3000);
路由express 路由express 路由
//路由小写和大写都可以。
var express = require('express');
var app = express();
app.get('/',function( req,res ) {
res.send('get请求');
});
app.post('/',function( req,res ){
res.send('post请求');
});
app.listen(1221);
//路由小写和大写都可以。
var express = require('express');
var app = express();
app.get('/',function( req,res ) {
res.send('get请求');
});
app.post('/',function( req,res ){
res.send('post请求');
});
app.listen(1221);
get和post请求都可以
app.all('/',function( req,res ){
res.send('get&post');
});
// 更推荐冒号写法
app.get('/student/:id',function( req,res ){});
app.get('/:username/:id',function( req,res ){ res.write(username); res.end(id) });
app.all('/',function( req,res ){
res.send('get&post');
});
// 更推荐冒号写法
app.get('/student/:id',function( req,res ){});
app.get('/:username/:id',function( req,res ){ res.write(username); res.end(id) });
有字符串正则系统
// 匹配 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');
});
// 匹配 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/');
});
// 路由中的正则表达式,可以使用分组捕获,程序中使用req.params[0],req.params[1]来获取
app.get(/student([\d]{1})\/class([\d]{2})$/,function( req,res ){
console.log( req.params[0],req.params[1] );
});
// 匹配任何路径中含有 a 的路径:
app.get(/a/, function(req, res) {
res.send('/a/');
});
// 路由中的正则表达式,可以使用分组捕获,程序中使用req.params[0],req.params[1]来获取
app.get(/student([\d]{1})\/class([\d]{2})$/,function( req,res ){
console.log( req.params[0],req.params[1] );
});
表单提交表单提交到本身页面 // restful 路由设计
/*
概念:
/student
get // 读取学生信息
// app.get('/student/:id',function(){});
add // 添加学生信息
// app.add('/student/:id',function(){});
delete // 删除学生信息 // app.delete('/student/:id',function(){});
问题:web网页中,大部分处理get和psot请求处理。
其它的服务,可以是从软件,或者app发出请求。一般restful是提供给app。
*/
app.get('/',function( req,res ){
res.render('form.ejs');
});
app.post('/',function( req,res ){
res.send('form表单提交');
});
/*
概念:
/student
get // 读取学生信息
// app.get('/student/:id',function(){});
add // 添加学生信息
// app.add('/student/:id',function(){});
delete // 删除学生信息 // app.delete('/student/:id',function(){});
问题:web网页中,大部分处理get和psot请求处理。
其它的服务,可以是从软件,或者app发出请求。一般restful是提供给app。
*/
app.get('/',function( req,res ){
res.render('form.ejs');
});
app.post('/',function( req,res ){
res.send('form表单提交');
});中间件中间件middleware ,少了一层回调。
所有的中间件,都将作为http.createServer();的回调。middlewarehttp.createServer();中间件特点:app.js中的代码,程序执行的时候运行,用户来了之后,并不执行。中间件中的代码块,每个用户访问的时候都会执行一次。具有跳楼现象,从上往下走,匹配一个就执行,而不会执行第二个。
app.get('/',function( req,res ){ res.send('A') });
app.get('/',function( req,res ){ res.send('B') });
//执行A,而不会执行B
app.get('/',function( req,res ){ res.send('A') });
app.get('/',function( req,res ){ res.send('B') });
//执行A,而不会执行B中间件的回调函数中有next参数,表示继续执行下一个匹配的中间件。 //利用next(),用两段小程序,来同时处理同一个请求。 把业务分开。 next() , 影响MVC。
app.get('/',function( req,res,next ){
res.send( 'A' );
next();
})
app.get('/',function( req,res,next ){
res.send( 'B' );
})
//这两个路由,感觉没关系,实际上冲突了。
app.get('/:username/:id',function( req,res ){
console.log(1);
res.send('用户信息'+ req.params[username]);
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
app.get('/',function( req,res,next ){
res.send( 'A' );
next();
})
app.get('/',function( req,res,next ){
res.send( 'B' );
})
//这两个路由,感觉没关系,实际上冲突了。
app.get('/:username/:id',function( req,res ){
console.log(1);
res.send('用户信息'+ req.params[username]);
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
解决方法方法1:
调整路由上下位置 //利用匹配就有跳楼现象。 express 中 所有的路由 都是中间件,具体的路由往上写,抽象的往下写。具体的路由往上写,抽象的往下写
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
app.get('/:username/:id',function( req,res ){
console.log(1);
res.send('用户信息'+ req.params[username]);
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
app.get('/:username/:id',function( req,res ){
console.log(1);
res.send('用户信息'+ req.params[username]);
});
方法2: 匹配到最后,要有最终的路由来匹配于它。
//加上next()之后,匹配两次,已经被send()一次,会报错。通过数据的判断适当加next()
app.get('/:username/:id',function( req,res ){
var username = req.paramse.username;
//检索数据库,如果username不存在,那么才next()
if( usernma ) {
console.log(1);
res.send('用户信息'+ req.params[username]);
} else {
next();
}
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
//加上next()之后,匹配两次,已经被send()一次,会报错。通过数据的判断适当加next()
app.get('/:username/:id',function( req,res ){
var username = req.paramse.username;
//检索数据库,如果username不存在,那么才next()
if( usernma ) {
console.log(1);
res.send('用户信息'+ req.params[username]);
} else {
next();
}
});
app.get('/admin/login',function( req,res ){
console.log(2);
res.send('管理员登陆');
});
app.use()此时并不会进行任何路由匹配,都是执行。一般处理404,和总体的返回编码和状态的使用。
// 多个路由都能够匹配
app.use('/admin',function( req,res ){
console.log(req.originUrl); // '/admin/new'
console.log(req.baseUrl); // 'admin'
console.log(req.path); // '/new'
next();
});
// 任何网址都是 '/' 的拓展
app.use('/',function( req,res ){});
app.use(function( req,res ){}); // 可以不用第一个参数 直接就是 '/',就是所有网址了。
app.use(); //增加一些特定功能的便利场所。
// 实际上app.use(); //基本上都从第三方能得到。 -- 路由顺序(落路)
app.use(user);
function user( req,res,next ){
var filePath = req.originalUrl;
fs.readFile('./public/'+filePath,function( err,data ){
if( err ){
//文件不存在
next()
return ;
}
res.send(data.toSting());
});
}
// 静态服务
app.use(express.static('./public'));
// 路由的上下关系,很有关系, 是否匹配第一个,是否需要next()
// 一般习惯把静态服务写在前头,后面的路由处理,一般不冲突。
// 返回编码和状态
app.use(function( req,res,next ){
res.status(200);
res.set('Content-Type','text/html;charset=utf-8');
next();
});
//404
app.use(function( req,res ){
res.status(404);
res.send('sorry');
});
// 多个路由都能够匹配
app.use('/admin',function( req,res ){
console.log(req.originUrl); // '/admin/new'
console.log(req.baseUrl); // 'admin'
console.log(req.path); // '/new'
next();
});
// 任何网址都是 '/' 的拓展
app.use('/',function( req,res ){});
app.use(function( req,res ){}); // 可以不用第一个参数 直接就是 '/',就是所有网址了。
app.use(); //增加一些特定功能的便利场所。
// 实际上app.use(); //基本上都从第三方能得到。 -- 路由顺序(落路)
app.use(user);
function user( req,res,next ){
var filePath = req.originalUrl;
fs.readFile('./public/'+filePath,function( err,data ){
if( err ){
//文件不存在
next()
return ;
}
res.send(data.toSting());
});
}
// 静态服务
app.use(express.static('./public'));
// 路由的上下关系,很有关系, 是否匹配第一个,是否需要next()
// 一般习惯把静态服务写在前头,后面的路由处理,一般不冲突。
// 返回编码和状态
app.use(function( req,res,next ){
res.status(200);
res.set('Content-Type','text/html;charset=utf-8');
next();
});
//404
app.use(function( req,res ){
res.status(404);
res.send('sorry');
});
render() & send()大多数情况下,渲染内容用res.render(),将会根据views的模板文件进行渲染,如果不想使用views文件夹,使用其它名字,res.render()
app.set('views','static');
app.set('views','static');
send(); //自动设置了Content-Type 头部和200状态码。和 mime类型。 send() 和 end() 一样。
send(); //自动设置了Content-Type 头部和200状态码。和 mime类型。 send() 和 end() 一样。get & postget请求的参数在url中,在原生node中,需要使用url模块来识别参数字符串,在express中,不需要使用url模块。可以直接使用req.query对象。req.querypost请求在express中不能直接获得,必须使用body-parser模块。使用后,将可用req.body得到参数。但是如果表单中含有文件上传,那么还是需要使用formidable模块。body-parserreq.bodyformidable模块post使用到的第三方模块:body-parser,formidablebody-parserformidable
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
// 设置模板
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({ extended: false }));
// router
app.get('/',function( req,res ){
res.render('form.ejs');
});
app.post('/',function( req,res ){
console.log(req.body);
});
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
// 设置模板
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({ extended: false }));
// router
app.get('/',function( req,res ){
res.render('form.ejs');
});
app.post('/',function( req,res ){
console.log(req.body);
}); 静态化文件利用expres.static(root); // root 参数指的是静态资源文件所在的根目录。expres.static(root);
// app.use方法实际上是将中间件保存在一个数组中,注册路由时,依次将数组的元素取出
app.use(express.static('./static'));
app.use('page',epxress.static('./static')); // page/index.html
// app.use方法实际上是将中间件保存在一个数组中,注册路由时,依次将数组的元素取出
app.use(express.static('./static'));
app.use('page',epxress.static('./static')); // page/index.html 模板引擎和 express 结合的模板是:jade,ejs
(ejs)[https://www.npmjs.com/package/ejs%5Djadeejshttps://www.npmjs.com/package/ejs%5D
var express = require('express');
var app = express();
// 设置模板引擎,设置为ejs
app.set('view engine','ejs');
// 路由
app.get('/',function( req,res ){
//render: 第二个参数是,字典。
res.render('index.ejs',{
'name': [ting,daie]
});
});
app.listen(1221);
var express = require('express');
var app = express();
// 设置模板引擎,设置为ejs
app.set('view engine','ejs');
// 路由
app.get('/',function( req,res ){
//render: 第二个参数是,字典。
res.render('index.ejs',{
'name': [ting,daie]
});
});
app.listen(1221);
对应的模板为:
- <%=name[i]%>
<%
for( var i=0; i
%>
<%
}
%>
- <%=name[i]%>
<%
for( var i=0; i
%>
<%
}
%>
默认的视图文件夹,views。如果不想使用默认的 app.set('views','./shitu');viewsapp.set('views','./shitu');希望本文所述对大家node.js程序设计有所帮助。
相关文章:
- js关于angular浏览器兼容性问题的解决方案js大全
- JavaScript深入了解Vue.js 混入(mixins)
- js解决父组件将子组件作为弹窗调用只执行一次created的问题js大全
- jsvuex中store存储store.commit和store.dispatch的用法js大全
- jsvue+axios全局添加请求头和参数操作js大全
- jsvue data对象重新赋值无效(未更改)的解决方式js大全
- jsVUE项目axios请求头更改Content-Type操作js大全
- jsVue-CLI 3 scp2自动部署项目至服务器的方法js大全
- jsVue中的this.$options.data()和this.$data用法说明js大全
- JavaScriptthree.js欧拉角和四元数的使用方法