NodeJS搭建服务器Tips —— 基础

一、模块引入

// 引入依赖的模块
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>

地址栏访问 http://127.0.0.1:8080/index.html

猜你喜欢

转载自blog.csdn.net/Nana_9457/article/details/82968576