node搭建服务器

创办轻易的服务器,能够简轻便单连接

搭建node远程服务器

1. 在根目录下安装node稳固版

图片 1

QQ截图20170907110449.png

2. 创立服务器

图片 2

image.png

var http = require('http');
var formidable = require('formidable');
var fs = require('fs');
var path = require('path')
var Util = require('./util.js')

http.createServer(function(req, res) {
    if (req.url == '/fileupload') {
        var form = new formidable.IncomingForm();
        form.parse(req, function(err, fields, files) {
            var oldpath = files.filetoupload.path;
            var newpath = '/home/qiuzhilin/www/blue-pi-upload.tianqi.cn/upload/' + files.filetoupload.name;
            fs.rename(oldpath, newpath, function(err) {
                if (err) throw err;
                // 获取文件名
                var txtname = path.basename(newpath);
                var basename = path.basename(newpath,'.txt')
                // 获取网络路径
                oldpath = path.join('https://blue-pi-upload.tianqi.cn/upload/',txtname)
                res.write(oldpath);
                // 读取文件内容
                fs.readFile(newpath, (err, data) => {
                  if (err) throw err;
                  data = data.toString()
                  data = Util.formateData(data)
                  data = JSON.stringify(data)
                  fs.writeFile('../blue-pi-upload.tianqi.cn/upload/json/' + basename + '.json' , data, (err) => {
                    if (err) throw err;
                    console.log('The file has been saved!');
                  });
                });
                res.end();
            });
        });
    } else {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
        res.write('<input type="file" name="filetoupload"><br>');
        res.write('<input type="submit">');
        res.write('</form>');
        return res.end();
    }
}).listen(10087);

3. 周转服务器

  • 张开Xshell,步向服务器
  • node ~/demo.js

4.
打开chrome,地址栏http://IP:10087/

图片 3

image.png

5. 文书上流传

图片 4

image.png

6.
访问https://blue-pi-upload.tianqi.cn/upload/json/hainan.json获取数据

图片 5

image.png

前几日晚上学习了一下怎么搭建服务器,使用原生的http模块,在此地总括一下体验。
首先我们介绍几个模块内容,(模块的措施只是介绍我们用的):

选取node.js搭建服务器,node.js搭建服务器

动用node搭建小型服务器(其实正是分析url然后输出文件给客户端)

近来亟需达成五个课程设计,被项目老总(主任)分配写分界面,但是总感觉只写前端的话缺了点什么,所以想协调写下后端玩一下。

里面还多少纠结了一下用什么样语言,本来打算正好学习一下PHP,可后来改变思路想想,用nodejs岂不美哉,不只有明白了后台开荒,也一定于巩固了js基础,一举两得,美滋滋。

在念书node的经过中,学到了利用node完毕二个服务器这一块,感到是对日前所学模块的二个很好的下结论。用到了多少个基本的模块fs
stream http path

代码如下:(内含蹩脚保加利亚语注解请见谅)

'use strict'
var url = require('url');
var path = require('path');
var fs = require('fs');
var http = require('http');
//get the current path
//var root = path.resolve('.');//以当前的目录为服务器的根目录
var root = path.resolve(process.argv[2] || '.');//以输入的参数作为服务器的根目录,如果没有输入参数就将当前目录作为服务器根目录
console.log('local root dir :' + root);
//create server
var server = http.createServer(function(request, response) {
  //get the path of URL
  var pathname = url.parse(request.url).pathname;
  //get the local path
  var filepath = path.join(root, pathname);
  //get the file stat and output the request file by callback function
  fs.stat(filepath, function(err, stat) {
    if(!err && stat.isFile()) {
      console.log('200' + request.url);
      response.writeHead(200);
      fs.createReadStream(filepath).pipe(response);//没有必要手动读取文件内容。由于response对象本身是一个Writable Stream,直接用pipe()方法就实现了自动读取文件内容并输出到HTTP响应。
    } else {
      console.log('404' + request.url);
      response.writeHead(404);
      response.end('404 Not Found');
    }
  });
});
server.listen(8080);
console.log('Server is running at http://127.0.0.1:8080/');

对此个中部分函数的演讲:

path.resolve() 路径寻航(这名字不错)
path.resolve([from…], to)

有个表明很风趣:也正是四处地调用系统的cd指令

eg:

path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile')
//相当于:
cd foo/bar
cd /tmp/file/
cd ..
cd a/../subfile1
path.join([path1],path[2]...) 路径合并

将富盛名称用path.seq串联起来,然后用normailze格式化

eg:

path.join('///foo', 'bar', '//baz/asdf', 'quux', '..');
=>'/foo/bar/baz/asdf'

既然涉及了normalize

那么:

格式化路线 path.normalize(p)
将不符合标准的路线格式化,简化开辟职员中管理种种繁复的门径推断

eg:

path.normalize('/foo/bar//baz/asdf/quux/..');
=> '/foo/bar/baz/asdf'

http.response.end()甘休相应,告诉顾客端具有新闻一度发送。当有着要再次来到的从头到尾的经过发送实现时,该函数必须求被调用一回。要是不调用该函数,那么客户端将会恒久处于等候意况。

行使方式:

response.end([data], [encoding])

data end()实行实现后要出口的字符,假如钦点了 data
的值,那就象征在实践完 response.end() 之后,会随着实施一条
response.write(data , encoding);

encoding 对应data的字符编码

上述所述是小编给大家介绍的利用node.js搭建服务器的点子,希望对我们具有扶助,假诺大家有任何疑窦应接给自家留言,笔者会及时恢复生机大家的,在此也极度感激我们对帮客之家网站的支撑!

使用node搭建Mini服务器(其实就是深入分析url然后输出文件给客户端)
近些日子亟待完毕二个课程设计,…

var http = require("http");var server = http.createServer();server.on("request",function{    res.end("ok");})server.listen(3000);console.log("running in 3000");
  1. var http = require(‘http’);
  2. var fs = require(‘fs’);
  3. var url = require(‘url’);

认清是文件夹依旧文件

首先大家须要选择http模块

fs.stat("./08.html",function(err,stats){        if(stats.isDirectory{            console.log("是文件夹");        }else if(stats.isFile{            console.log("是文件");        }    })

//创造贰个服务器,这里运用es6语法

看清文件

var server = http.createServer((req,res) =>{
      //获取url地址,这里与浏览端获取的有所不同
        var urlObj= url.parse(req.url,true);
        //拿到对应的路径地址
        var pathname =urlObj.pathname;
        var reg=/\.(html|css|js)/i;
        if(reg.test(pathname)){
                  var suffixType="html/plain";
                  var sunffix=reg.exec(pathname)[1].toUpperCase();
                switch(suffix){
                    case "HTML":
                        suffixType = "text/html";
                        break;
                    case "JS":
                        suffixType = "text/javascript";
                        break;
                    case "CSS":
                        suffixType = "text/css";
                        break;
              }
    //打开文件流查找对应的文件。
         fs.readFile("."+pathname,"utf8", (err, data) => {
                  if (err){
                         res.writeHead(404, {'content-type': suffixType + ";charset=utf-8;"});
                         return;
                    }

                    res.writeHead(200, {'content-type': suffixType + ";charset=utf-8;"});
                    res.end(data);

                });
        }
});
server.listen('12345',() => {
    console.log("端口启动"+"12345");
})
fs.access("./08.html",function{        if{            console.log("文件不存在");            throw err;        }        fs.readFile("./08.html",function{            if{                throw err;            }            console.log("文件存在");            res.end;        })    })

那标准就足以获得静态能源了。
这里在介绍两个东西

MIME支持

这段日子给顾客端重返文件时,大家并从未点名Content-Type头,纵然您也许开采访谈文本或图表浏览器都能够正确显示出文字或图片,但那并不符合标准。任何带有实体中央(entity
body)的响应都应在头顶指明文件类型,不然浏览器无从得知类型时,就能够自动猜想(从文件内容以及url中寻觅也许的恢弘名)。响应如内定了不当的项目也会形成内容的混杂展现,如明明重回的是一张jpeg图片,却错误钦命了header:'Content-Type': 'text/html',会吸纳一群乱码。

var mime = {    'psd': 'application/x-photoshop',    'ppt': 'application/powerpoint',    'php': 'application/x-httpd-php',    'mp3': 'audio/mp3',    'jpg': 'image/jpeg',    'png': 'image/png',    'tiff': 'image/tiff',    'tif': 'image/tiff',    'css': 'text/css',    'html': 'text/html',    'htm': 'text/html',    'txt': 'text/plain',    'text': 'text/plain',    'qt': 'video/quicktime',    'mov': 'video/quicktime',    'avi': 'video/x-msvideo',    'movie': 'video/x-sgi-movie',    'doc': 'application/msword',    'word': 'application/msword',    'json': 'text/json'}

服务器获取供给后可以对诉求路径做出管理的两种艺术

 var path = require("path"); console.log(path.basename("/foo/bar/index.html"));//"index.html" console.log(path.basename("/foo/bar/index"));//"index" console.log(path.extname("/foo/bar/index.html"));//".html" console.log(path.extname("/foo/bar/index.css"));//".css" console.log(path.extname("/foo/bar/index"));//"" console.log(path.dirname('/foo/bar/baz/asdf/quux')); // 返回: '/foo/bar/baz/asdf'

1.获得前端传来的数据

   var body = '';
            req.on('data', function (data) {
              //得到前台的数据
                console.log(data.toString('utf8'));
            });
              res.on('end', function () {
                 console.log("Body: " + body);
              });
              req.on('timeout',function(){
                       console.log('timeout got :');
                       res.writeHead(404, {'content-type': suffixType + ";charset=utf-8;"});
                        res.end();
                       return ;
              })
        return;

2.若是资源找不到,重返404谬误

   setTimeout(function(){
            req.emit('timeout',{message:'have been timeout...'});

            return ;
        },3000);
//三秒后触发 事件
 req.on('timeout',function(){
                       console.log('timeout got :');
                       res.writeHead(404, {'content-type': suffixType + ";charset=utf-8;"});
                        res.end();
                       return ;
              })

发表评论

电子邮件地址不会被公开。 必填项已用*标注