『壹』 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.js
3.中间件
中间件(middleware)就是处理HTTP请求的函数.
当一个HTTP请求进入服务器,服务器实例会调用第一个中间件,完成后根据设置,决定是否再调用下一个中间件.
中间件的参数为:
.四个的时候---第一个为错误处理,第二个为客户请求request,第三个为服务器响应respond,第四个为next中间件. 如function(error, request, response, next){}
.三个的时候---第一个客户请求request,第二个为服务器响应respond,第三个为next中间件. 如function(request, response, next){}
.两个的时候---第一个客户请求request,第二个为服务器响应respondfunction. 如function(request, response){}
4.使用中间件use
use是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.设置环境变量set
set用于指定变量的值.
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.files
11.启动脚本package.json
package.json用于指定app信息,nodejs版本号和其他组件的依赖关系
{
"name": "demo",
"description": "My First Express App",
"version": "0.0.1",
"dependencies": {
"express": "3.x"
}
}
12.app入口app.js
app.js主要包含http的创建,基本路由,监听端口号
13.动态网页模板views
views文件夹,用于存放所有的放网页模板.
//app.js
app.get('/', function(req, res) {
res.render('index',{title:"最近文章"});
});
//index.js
this is <%=title%>!
14.指定静态网页目录
//app.js
app.use(express.static('public'));//指定静态网页目录,当浏览器发出非HTML文件请求时,服务器端就到public目录寻找这个文件
如:<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">, 服务器端就到public/bootstrap/css/目录中寻找bootstrap.css文件
『贰』 NodeJS项目基础结构简单介绍
按照常规,去执行npm start
或者在Terminal中手动输入命令,结果如下:
可以看到是执行了test/package.json文件中的 start 命令,初始packagejson.json文件内容如下:
执行 start ,对应的命令为 node ./bin/www 并在命令行执行。现在项目已经启动成功了,可以打开浏览器输入 localhost:3000 查看一下,但是本次侧重点在于项目启动时候发生的完整的过程。所以……
那么我们需要看一下 ./bin/www 文件
通过 require() 来引入本地安装的包,这里加载了三个包 app、debug 、http ,主要关注一下app.js
可以看到app加载的为该项目基础组件,核心为 var app = express(); 看一下express.js
将app用到的中间件等暴露出来,所以 app = express() 实际上就是加载应用基础组件,生成项目的根节点(当然这个节点是复合的)。所以在app.js中,进行的是加载应用基础组件并进行应用设置初始化(包含了视图目录设置、页面模板引擎设置、中间件的设置、静态资源目录设置以及错误捕捉相关内容)。
继续回到 www.js ,同样将debug配置、http相关组件进行加载。继而是默认端口号的设定。通过http.createServer(app),创建应用服务相关信息,并对端口进行监听。
浏览器输入 localhost:3000
控制台显示:
说明在以 GET 方式请求URI为 "/" 的资源,并以 GET 方式请求 /stylesheets/style.css 资源,这个发生在app.js中我们设定的资源请求。
我们来看下 ./routes/index 文件
即定义网站主页的路由
使用 express.Router 类创建模块化、可挂载的路由句柄(简称:路由模块)。Router 实例是一个完整的中间件和路由系统。最终,在应用中加载路由模块app.use('/', indexRouter);
通过 res.render 对视图进行渲染,上述为对index.ejs的渲染。 ps:在app.js中已经设定了views的所在目录 。语法: res.render(view [,locals] [,callback])
示例:
区别:路由句柄
为请求处理提供多个回调函数,其行为类似 中间件 。唯一的区别是这些回调函数有可能调用 next('route') 方法跳至下一个同路由的回调函数而略过其他路由回调函数。路由句柄有多种形式,可以是一个函数、一个函数数组,或者是两者混合。
使用一个回调函数处理路由:
使用多个回调函数处理路由(记得指定 next 对象):
使用回调函数数组处理路由:
混合使用函数和函数数组处理路由:
区别:路由方法
一个路由示例:
路由方法源于 HTTP 请求方法,和 express 实例相关联。
获取express的一个实例 app ,通过路由方法(和HTTP请求对应),GET方式请求 "/"。详细的路由方法参考链接: 路由方法
『叁』 nodejs中报以下错误的
.
Mole这里,
看看有这样的代码没得
mole.exports=router;
『肆』 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);
『伍』 nodejs router.get怎么在里面调用方法
做过web开发的朋友对get和post 的请求的区别肯定十分了解,我就不多讲述了。
下面主要介绍一下get和post请求在node中使用的不同
场景就是单纯大登录操作:传递两个参数用户名和密码
get请求:
前台:
function login() {
var name = $('#name').val();
var password = $('#password').val();
if (!name || !password) {
alert('用户名和密码都不能为空');
return;
}
$.ajax(
{
type: 'get',
url: '/login',
data: {
name: name,
password: password
},
dataType: 'json',
success: function (data) {
if (data) {
}
},
error: function () {
alert('登录失败!');
return;
}
});
}
后台:
var express = require('express');
var router = express.Router();
router.get('/login', function (req, res, next) {
var name = req.query.name;
var pass = req.query.password;
console.log('name:' + name);
console.log('pass:' + pass);
if (name == 'sis' && pass == '1') {
res.send('1');
}
res.end('is over');
});
post请求:
前台:
function login() {
var name = $('#name').val();
var password = $('#password').val();
if (!name || !password) {
alert('用户名和密码都不能为空');
return;
}
$.ajax(
{
type: 'post',
url: '/login',
data: {
name: name,
password: password
},
dataType: 'json',
success: function (data) {
if (data) {
}
},
error: function () {
alert('登录失败!');
return;
}
});
}
后台:
var express = require('express');
var router = express.Router();
router.post('/login', function (req, res, next) {
var name = req.body.name;
var pass = req.body.password;
console.log('name:' + name);
console.log('pass:' + pass);
if (name == 'sis' && pass == '1') {
res.send('1');
}
res.end('is over');
});
从文章中可以明显看出get和post请求在node中区别,使用get请求时一定要使用get方法进行监听,并且获取传递过来的参数是要使用query,使用post请求时一定要使用post方法进行监听,同时获取数据是要使用body。至于为什么这样做我暂时不是很清楚,如果我搞清楚了会及时补充上去,欢迎大家补充。
顺带补充,还有一种方法传递参数给server,就是使用路径的方式,可以利用web server的http routing来解析,常见于各种web Framework。这不算是传统标准规范的做法,是属于htto routing的延伸使用
router.get('/login', function(req, res) {
console.log(req.params.name);
console.log(req.params.password);
});