欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>

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

相关标签: NodeJS