nodejs的http请求
为什么要学node
对于不了解前端的人来说,大概前端的工作无非是写网页,做特效,做动画等等…
当然我开始也是这么以为的,认为如果不是必须的话,我可能永远不会去接触后台的东西,看到和我一起学前端的很多同学都去转java的时候,我也有点心动了,但是发现java也太难了,自己可能真的不适合java。知道最近工作室要求需要有自己的个人博客我才反应过来不会写后台的我很难搞哦,所以选择了适合我们前端写后台的nodejs,我也会记录下从开始搭建博客到结束的过程,这既是对自己成长的记录,也是想养成写博客的习惯。
node是什么?
如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。
Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。
创建第一个node demo
在已经安装好node 的前提下,我们先创建一个app.js文件:
接下来我们先尝试node文件的启用:
console.log("这是第一个node")
然后在命令行打开文件夹位置,启动app.js,启动命令:
$node app.js
终端就会输出 “这是第一node”的内容
使用http 创建第一个应用
步骤一:引入http模块
使用require来载入http模块,并将实例化的 HTTP 赋值给变量 http,方法如下:
let http = require("http")
步骤二:创建服务器
接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 3000端口。 函数通过 request, response 参数来接收和响应数据。
实例如下,在你项目的根目录下创建一个叫 app.js 的文件,并写入以下代码
const http = require('http')
const PORT = 3000
const server = http.createServer(function(req,res){
res.end("hello world")
})
server.listen(PORT,function(){
console.log("启动成功....")
})
在命令行启动如下:
我们在浏览器打开本地服务:
通过上述图片说明通过node 已经成功将请求发送出去了。
node路由的应用
在说路由之前分享一段代码:
app.get('/', function(req, res) {
res.sendFile(__dirname + "/public/views/" + "login.html");
})
app.get('/login', function(req, res) {
var response = {
"account": req.query.account,
"password": req.query.password,
};
var selectSQL = "select account,password from user where account = '" + md5(req.query.account) + "' and password = '" + md5(req.query.password) + "'";
//var selectSQL = "select password from user where account='"+req.query.account+"'";
var addSqlParams = [md5(req.query.account), md5(req.query.password)];
connection.query(selectSQL, function(err, result) {
if(err) {
console.log('[login ERROR] - ', err.message);
return;
}
//console.log(result);
if(result == '') {
console.log(md5(req.query.account))
console.log("帐号密码错误");
res.end("0"); //如果登录失败就给客户端返回0,
} else {
res.sendFile(__dirname + "/public/views/" + "view.html");
}
})
console.log(response);
//res.end(JSON.stringify(response));
})
//注册页面的实现
app.get('/register', function(req, res) {
res.sendFile(__dirname + "/public/views/" + "register.html");
})
//注册模块
var addSql = 'INSERT INTO user(account,password,name) VALUES(?,?,?)';
app.get('/process_get', function(req, res) {
// 输出 JSON 格式
var response = {
"account": req.query.account,
"password": req.query.password,
"name": req.query.name
};
var addSqlParams = [md5(req.query.account), md5(req.query.password), req.query.name];
connection.query(addSql, addSqlParams, function(err, result) {
if(err) {
console.log('[INSERT ERROR] - ', err.message);
res.end("0"); //如果注册失败就给客户端返回0
return; //如果失败了就直接return不会继续下面的代码
} else {
fs.readFile(__dirname + "/public/views/" + "login.html",function(err,data){
if(err){
res.end(err)
return
}
res.end(data)
})
}
});
console.log(response);
//res.end(JSON.stringify(response));
})
//写博文功能的实现
app.get('/topic', function (req, res) {
res.sendFile( __dirname + "/public/views/" + "topic.html" );
})
var addcontent = 'INSERT INTO top_content(topic_content,topic_type,topic_person) VALUES(?,?,?)';
app.get('/topic_commnet',function(req,res){
var response = {
"topic_content":req.query.topic_content,
"topic_type":req.query.topic_type,
"topic_person":req.query.topic_person
}
var addSqlcontent = [req.query.topic_content,req.query.topic_type,req.query.topic_person]
connection.query(addcontent,addSqlcontent,function (err, result) {
if(err){
console.log('[INSERT ERROR] - ',err.message);
res.end("0");
return;//如果失败了就直接return不会继续下面的代码
}else{
getData()
res.sendFile( __dirname + "/public/views/" + "view.html" );
}
})
console.log(response);
})
在我还不懂路由的时候再出来的代码就是上述那样,所有的代码全部放在app.js里面,这样的坏处和很明显,层次逻辑不清楚,代码太乱,可读性太差,所以我们需要将文件不同功能分开。
目录结构如下:
使用一个具体事例来更清楚的了解node路由的作用:
我们通过路由函数的形式进行参数传递。
route.js文件的代码如下:
function route(pathname) {
console.log("About to route a request for " + pathname);
}
exports.route = route;
app.js文件代码如下:
var http = require("http");
var url = require("url");
function start(route) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
route(pathname);
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
两个路由函数分别以 route 和 start 函数传递。
我们会相应扩展 index.js,使得路由函数可以被注入到服务器中:
var server = require("./app");
var router = require("./router");
server.start(router.route);
最后启动index.js文件可以输出 hello word
虽然在一个小案例里面使用node路由会觉得很麻烦,但是当在真正项目的时候,特别是文件层次较多时使用路由就会使得代码层次感更清楚!!!!
本人目前也是处于node初学者,分享有错请多包涵!^ _ ^