express是一个利用node.js创建Web应用的框架,它具有的核心特性如下:
使用npm进行安装(如果不知道什么是npm建议先入门一下node.js,尤其是模块系统),执行以下代码:
npm install express
安装完成后可以查看express使用的版本号:
npm list express
若出现以下结果,证明安装成功:
在实际应用开发中也可以把版本号写到package.json文件的"dependences"中。
另外需要安装一些工具包以供后续开发。
npm install body-parser
//server.js
var express =require("express");
var http=require("http");
const app=express();
const httpServer=http.createServer(app);
httpServer.listen(4000,function (){
console.log("Server listening on 4000")
});
执行以上代码,控制台输出"Server listening on 4000",表示关联成功,现在访问localhost:4000即访问该网站。
在上述代码中,两个require语句导入了对应的模块,app为express的一个对象,但是此时的app并未监听本地服务器地址,因此需要http模块来关联,使用 http.createServer(app) 来创建一个http服务器,将app作为参数传入该函数中,并让该服务器监听端口4000。此时服务器已经搭建完成,但是由于里面是没有内容的,所以打开了该网站也没有意义。
下面我们试着在该页面输出一个Hello World!增加两行代码:
//server.js
var express =require("express");
var http=require("http");
//在主页面输出Hello World!
app.get('/',function (req,res){
res.send('Hello World!');
});
const app=express();
const httpServer=http.createServer(app);
httpServer.listen(4000,function (){
console.log("Server listening on 4000")
});
app.get() 函数有两个参数,第一个参数是’/',这是路由路径,表示根目录,当文件里有多级路由的时候,就可以监听不同界面收到的信息。第二个参数是回调函数,利用Send() 向前端主页面发送信息,并将其显示在主页上。
很好,现在你已经掌握了express+node.js了。
静态文件是指html,css,图片等文件,以下是一个html文件,决定了打开localhost之后的页面布局。在项目根目录创建一个public文件夹,并将该文件放入。
<html>
<body>
<form action="http://127.0.0.1:4000/process_get" method="GET">
First Name: <input type="text" name="first_name"> <br>
Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
form>
body>
html>
下面修改服务端代码:
var express =require("express");
var http=require("http");
const app=express();
const httpServer=http.createServer(app);
//设置静态文件目录,它与原生node.js中使用path和join来实现处理静态文件是等价的
app.use("/public",express.static('public'));
//app.use的作用和app.get差不多,第一个参数是路由
//设置路由及对应文件,当浏览器输入地址/index.html的时候,将本地html发送过去并展示。
app.get('/index.html',function (req, res) {
res.sendFile(__dirname+"/public/index.html");
})
//process_get是html中action指定的路由
app.get('/process_get',function (req, res) {
//注意这里的命名必须要保证和html里面的input命名一致
let response={
"first_name":req.query.first_name,
"last_name":req.query.last_name
};
console.log(response);
res.end(JSON.stringify(response));
});
httpServer.listen(4000,function (){
console.log("Server listening on 4000")
});
此时在浏览器中访问 localhost:4000/index.html 即可查看对应页面。
在index.html中,定义了一个表单form,包含交互控件(input等)。表单后的参数action="http://127.0.0.1:4000/process_get"处理表单提交的URL。method表示该表单执行的动作,“GET"是表单上的数据会附在action的URL中,server.js中的app.get(‘/process_get’,…) 就是来监听这一数据的。另外method可以是"POST”,会将数据发送到服务器,下面将详细介绍。
<html>
<body>
<form action="http://127.0.0.1:4000/process_post" method="POST">
First Name: <input type="text" name="first_name"> <br>
Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
form>
body>
html>
与上文中的html相比,将get改成了post。
var express =require("express");
var http=require("http");
var bodyParser=require('body-parser')
//创建URL解析器
var urlencodedParser=bodyParser.urlencoded({extended:false});
const app=express();
const httpServer=http.createServer(app);
//设置静态文件目录,它与原生node.js中使用path和join来实现处理静态文件是等价的
app.use("/public",express.static('public'));
//app.use的作用和app.get差不多,第一个参数是路由
//设置路由及对应文件,当浏览器输入地址/index.html的时候,将本地html发送过去并展示。
app.get('/index.html',function (req, res) {
res.sendFile(__dirname+"/public/index.html");
})
//注意这里是app.post,将此处的process_get改成process_post,传入URL解析器
app.post('/process_post',urlencodedParser,function (req, res) {
//注意这里的命名必须要保证和html里面的input命名一致
let response={
//注意这里改成了body
"first_name":req.body.first_name,
"last_name":req.body.last_name
};
console.log(response);
res.end(JSON.stringify(response));
});
httpServer.listen(4000,function (){
console.log("Server listening on 4000")
});
可以发现,POST能够实现的功能和GET类似,因此有时候可以使用GET代替POST。
现在你已经学会了express应用程序的基本框架了,并且也学会了使用传统的GET和POST方法实现前后端数据传输。现在可以发挥想象力做点小东西试一试了!
学习笔记,原创不易。如有错误,欢迎指出。