NodeJS搭建服务器Tips —— 基础
程序员文章站
2022-03-04 20:45:52
...
一、模块引入
// 引入依赖的模块
var http = require('http');
使用npm安装模块
- 当前目录下安装
npm install express - 全局安装
npm install express -g -
查看模块版本
npm list express
二、同步(Sync)异步(回调函数)
// 同步
var data = fs.readFileSync('file0.txt');
console.log(data.toString());
console.log('fs over');
// 异步
fs.readFile('file0.txt', function(err, data){
if(err){
return console.log(err);
}
console.log(data.toString());
})
console.log('fs over');
三、自定义模块
require用于获取模块,exports用于模块导出。
将上述异步代码单独提取到一个文件中(成为一个模块,命名为nana_file.js)改写为
var fs = require('fs');
exports.fr = function (fn) {
// 同步
// var data = fs.readFileSync('file0.txt');
// console.log(data.toString());
// console.log('fs over');
// 异步
fs.readFile(fn, function(err, data){
if(err){
return console.log(err);
}
console.log('file data:');
console.log(data.toString());
})
console.log('nana async fs over');
}
多个功能函数可以写多个exports.funcName = function (){…}
在main.js文件中使用自定义模块
var na_fs = require('./nana_file');
na_fs.fr('file0.txt');
四、GET/POST传参
GET传参通过解析url,即url.parse(req.url, true).query;
POST传参通过自定义变量,异步写入req的data,并通过变量中是否有参数判断展示表单还是结果页面。
将get/post参数传递代码提取成模块(命名为nana_http.js)
var http = require('http');
var url = require('url');
var querystring = require('querystring');
exports.get = function(){
http.createServer(function(req, res){
//charset=UTF-8解决中文乱码
res.writeHead(200,{'Content-type':'text/html;charset=UTF-8'});
//获取get参数存储于params对象中
var params = url.parse(req.url, true).query;
//按url ?后的参数名读取并输出到返回页面中
res.write("姓名:" + params.name);
res.write("<br>");
res.write("性别:" + params.sex);
res.end();
}).listen(3000);
console.log('Server running at http://127.0.0.1:3000/');
}
exports.post = function(){
var postHTML =
'<html><head><meta charset="utf-8"><title>Post传参实例</title></head>' +
'<body>' +
// 注意此处的form提交方法是post
'<form method="post">' +
'姓名: <input name="name"><br>' +
'性别: <select name="sex"><option value="男">男</option><option value="女">女</option></select><br>' +
'<input type="submit">' +
'</form>' +
'</body></html>';
http.createServer(function (req, res) {
var body = "";
req.on('data', function (chunk) {
body += chunk;
});
req.on('end', function () {
// 通过querystring解析参数
body = querystring.parse(body);
// 设置响应头部信息及编码
res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
if(body.name && body.sex) { // 输出提交的数据
res.write("网站名:" + body.name);
res.write("<br>");
res.write("性别:" + body.sex);
} else { // 输出表单
res.write(postHTML);
}
res.end();
});
}).listen(3001);
console.log('Server running at http://127.0.0.1:3001/');
}
在main.js中调用(注意端口号分开时可同时调用两个函数)
var na_http = require('./nana_http');
// 在不同网址中查看两种传参效果:http://127.0.0.1:3000/?name=111&sex=%E5%A5%B3;http://127.0.0.1:3001
na_http.get();
na_http.post();
五、创建web服务器
用户在浏览器地址栏中输入url;
服务器端处理请求地址,从文件系统中找到相应的页面返回。
建立自定义nana_web.js模块
var http = require('http');
var fs = require('fs');
var url = require('url');
exports.server = function(){
http.createServer(function(req, res){
// 解析请求,提取文件名(/文件名)
var pathname = url.parse(req.url).pathname;
// 查看req.url内容
// console.log(url.parse(req.url));
console.log('Request for ' + pathname + ' received.');
// 从文件系统中读取请求文件内容
fs.readFile(pathname.substr(1), function(err, data){
if(err){
console.log(err);
res.writeHead(404,{'Content-Type':'text/html'});
} else {
res.writeHead(200,{'Content-Type': 'text/html'});
res.write(data.toString());
}
// 发送响应内容
res.end();
})
}).listen(8080);
console.log('Server running at http://127.0.0.1:8080/');
}
在main.js中调用
var na_web = require('./nana_web');
// web服务器
na_web.server();
form.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>NodeJS创建Web服务器</title>
</head>
<body>
<h1>欢迎你~</h1>
<p>我是web服务器的页面index.html</p>
</body>
</html>
上一篇: Python知识点总结篇(四)
下一篇: Python小白学习记录1