导航:首页 > IDC知识 > node服务器

node服务器

发布时间:2020-08-04 15:07:03

1、nodejs当web服务器行不行

可以呀

使用Node.js搭建Web服务器是学习Node.js比较全面的入门教程,因为实现Web服务器需要用到几个比较重要的模块:http模块、文件系统、url解析模块、路径解析模块、以及301重定向技术等,下面我们就一起来学习如何搭建一个简单的Web服务器。

作为一个Web服务器应具备以下几个功能:

1、能显示以.html/.htm结尾的Web页面

2、能直接打开以.js/.css/.json/.text结尾的文件内容

3、显示图片资源

4、自动下载以.apk/.docx/.zip结尾的文件

5、形如http://xxx.com/a/b/ , 则查找b目录下是否有index.html,如果有就显示,如果没有就列出该目录下的所有文件及文件夹,并可以进一步访问。

6、形如http://xxx.com/a/b,  则作301重定向到http://xxx.com/a/b/ , 这样可以解决内部资源引用错位的问题。

引入需要用到的几个模块:


//http协议模块var http = require('http');//url解析模块var url = require('url');//文件系统模块var fs = require("fs");//路径解析模块var path = require("path");

创建服务并在指定的端口监听:


//创建一个服务var httpServer = http.createServer(this.processRequest.bind(this)); //在指定的端口监听服务httpServer.listen(port,function(){    console.log("[HttpServer][Start]","runing at http://"+ip+":"+port+"/");    console.timeEnd("[HttpServer][Start]");});

在创建服务的时候需要传递一个匿名函数processRequest 对请求进行处理,processRequest接收2个参数,分别是request和response, request对象中包含了请求的所有内容,response是用来设置响应头以及对客户端做出响应操作。 

processRequest:function(request,response){    var hasExt = true;    var requestUrl = request.url;    var pathName = url.parse(requestUrl).pathname;     //对请求的路径进行解码,防止中文乱码    pathName = decodeURI(pathName);     //如果路径中没有扩展名    if(path.extname(pathName) === ''){        //如果不是以/结尾的,加/并作301重定向        if (pathName.charAt(pathName.length-1) != "/"){            pathName += "/";            var redirect = "http://"+request.headers.host + pathName;            response.writeHead(301, {                location:redirect            });            response.end();            return ;        }        //添加默认的访问页面,但这个页面不一定存在,后面会处理        pathName += "index.html";        hasExt = false; //标记默认页面是程序自动添加的    }     //获取资源文件的相对路径    var filePath = path.join("http/webroot",pathName);     //获取对应文件的文档类型    var contentType = this.getContentType(filePath);     //如果文件名存在    fs.exists(filePath,function(exists){        if(exists){            response.writeHead(200, {"content-type":contentType});            var stream = fs.createReadStream(filePath,{flags:"r",encoding:null});            stream.on("error", function() {                response.writeHead(500,{"content-type": "text/html"});                response.end("<h1>500 Server Error</h1>");            });            //返回文件内容            stream.pipe(response);        }else { //文件名不存在的情况            if(hasExt){                //如果这个文件不是程序自动添加的,直接返回404                response.writeHead(404, {"content-type": "text/html"});                response.end("<h1>404 Not Found</h1>");            }else {                //如果文件是程序自动添加的且不存在,则表示用户希望访问的是该目录下的文件列表                var html = "<head><meta charset='utf-8'></head>";                 try{                    //用户访问目录                    var filedir = filePath.substring(0,filePath.lastIndexOf('\'));                    //获取用户访问路径下的文件列表                    var files = fs.readdirSync(filedir);                    //将访问路径下的所以文件一一列举出来,并添加超链接,以便用户进一步访问                    for(var i in files){                        var filename = files[i];                        html += "<div><ahref='"+filename+"'>"+filename+"</a></div>";                    }                }catch (e){                    html += "<h1>您访问的目录不存在</h1>"                }                response.writeHead(200, {"content-type": "text/html"});                response.end(html);            }        }    });}

请求处理函数中有几个重点需要说一下:

对于路径中有中文的,浏览器会自动进行编码(英文不变,中文会变),因此在接收到地址后,需要对地址进行解码,否则最后得到的路径和真实路径不相符,

当访问路径不是以具体的文件结尾,并且不是以/结尾,则需要通过重定向加上/,表示当前目录,否则当前路径下的静态资源会找不到

如果访问路径是目录,则列出该目录下所有文件及文件夹,并可以点击访问,为了让中文目录能正常显示,则还要在header中设置charset=utf-8

核心代码就这么多,大概140行左右,完整的代码已上传到github:https://github.com/git-onepixel/Node,  

如果要运行demo,打开cmd切换到根目录,运行node start 即可。

2、怎么访问服务器上的node?

首先创建一个HTTP服务器,当服务器接收到客户端的请求后,向""网站请求数据,当从该网站接受到的响应数据后,将响应数据发送给客户端.
代码如下:
var http=require("http");
var url=require("url");
var server=http.createServer(function(sreq,sres){
var url_parts=url.parse(sreq.url);
var opts={
host:"",
port:80,
path:url_parts.pathname,
headers:sreq.headers
};
var creq=http.get(opts, function (cres) {
sres.writeHead(cres.statusCode,cres.headers);
cres.pipe(sres);
});
sreq.pipe(creq);
});
server.listen(1337,"127.0.0.1", function () {
console.log("开始监听"+server.address().port+"......");
});
运行代码后,在浏览器端运行程序:
发现没有,界面是淘宝的官网,但是地址确实变成我们本地的了.
是不是很好玩的样子呢,其实node.js可以做很多的事情,小伙伴们自己去开发吧。

3、node 怎么在服务器上运行?

首先安装node.js环境,windows可以直接下载安装包,下一步到底就可以了~~linux可以使用不同发行版的包管理版器(但通常版权本都不是最新的),使用最新版本可以从官网下载压缩包,然后解压就可以了,运行node.js代码只需要在命令行中运行node XXX.js(xxx.js为你的代码文件,如果没有将node添加到环境变量,则需要进入node的目录在执行上述命令)~ok 貌似就是这样了~

4、nodejs 如何部署到服务器上?

两点:第一是否是线上服务,第二是否需要守护进程;
第一点,如果是线上服务,毫无疑问需要一个守护进程来保证,发生意外导致进程退出后,能重新启动,提供服务;当然就需要pm2等守护进程来启动,使用方法请自行参照github;第二点,是否需要守护进程,如果不需要,那么直接node启动即可;如果需要,也不必担心pm2启动进程后并不会抢占服务器资源,如果你的server有很大的需求,毋庸置疑需要更多的内存和cpu,如果没有很大需求,pm2会基于linux的资源调度策略,并不会抢占;

5、在局域网中怎么搭建node服务器?

1.安装nodejs服务(从官网下载安装),node相当于apache服务器
2.在自己定义的目录下新建服务器文件如 server.js
例如,我在E:\PhpProject\html5\websocket下创建了server.js文件
var http = require('http');//引入http模块
//开启服务,监听8888端口
//端口号最好为6000以上
var server = http.createServer(function(req,res){
console.log('有客户端连接');//创建连接成功显示在后台

6、node.js代码怎么放到服务器

将代码部署到服务器的代码目录,这里要注意,如果直接 npm start 或 node app.js 启动,则一旦退出 ssh 远程登陆,nodeapp 就会停止运行。因此我们使用 forever 或者pm2启动 nodeapp。
forever和pm2的区别:
forever
管理多个站点,每个站访问量不大,不需要监控。
pm2
网站访问量比较大,需要完整的监控界面。

使用forever的命令:
[plain] view plain copy
npm install forever -g
[plain] view plain copy
forever start app.js

7、node怎么创建服务器

小鸟云服务器niaoyun实例创建好之后,您可以使用以下任意一种方式登录服务器:

远程桌面连接(,MSTSC):采用这种方式登录,请确保实例能访问公网。如果在创建实例时没有购买带宽,则不能使用远程桌面连接。

管理终端VNC:无论您在创建实例时是否购买了带宽,只要您本地有网页浏览器,都可以通过管理控制台的管理终端登录实例。

使用远程桌面连接(MSTSC)登录实例

打开开始菜单>远程桌面连接,或在开始菜单>搜索中输入mstsc。也可以使用快捷键Win+R来启动运行窗口,输入mstsc后回车启动远程桌面连接。

在远程桌面连接对话框中,输入实例的公网IP地址。单击显示选项。

输入用户名,如小鸟云默认为niaoyun。单击允许我保存凭据,然后单击连接。这样以后登录就不需要手动输入密码了。

8、nodejs写服务器怎么样

目前最主流的三个Web服务器是Apache、Nginx、IIS。

Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块,代码如下:

[javascript] view plain copy

var http = require('http');  

在通常的服务器中,数据流通的方式是客户先通过浏览器进行发送请求,服务器在项目中进行查找,然后进客户所需要的页面进行返回,在查找的过程中可能存在两种情况,就是存在和不存在,当然,我们会做出判断,下面就是简单的服务器实现过程:

1、编写服务器代码server.js

[javascript] view plain copy

var http=require('http');  

var fs = require('fs');  

var url = require('url');  

//创建服务器  

http.createServer(function(request,response) {  

//解析请求,包括文件名  

var pathname= url.parse(request.url).pathname;  

//输出请求的文件名  

console.log("Request for "+ pathname + "  received.");  

//从文件系统中都去请求的文件内容  

fs.readFile(pathname.substr(1),function(err, data) {  

if(err) {  

console.log(err);  

//HTTP 状态码 404 : NOT FOUND  

//Content Type:text/plain  

response.writeHead(404,{'Content-Type': 'text/html'});  

}  

else {  

//HTTP 状态码 200 : OK  

//Content Type:text/plain  

response.writeHead(200,{'Content-Type': 'text/html'});  

//写会相应内容  

response.write(data.toString());  

}  

//发送响应数据  

response.end();  

});  

}).listen(8081);  

console.log('Server running at http://127.0.0.1:8081/');  

通过上面代码,我们就能够实现服务器对于文件的查找,下面,我们就进行创建一个html文件,然后通过浏览器进行访问

2、编写html文件(index.html),用于浏览器进行请求

[html] view plain copy

<!DOCTYPE html>  

<html lang="en">  

<head>  

<meta charset="UTF-8">  

<title>index</title>  

</head>  

<body>  

这是一个用于进行nodejs服务器测试的html文件,我们能够通过在浏览器上面输入  

http://127.0.0.1:8081/WebServer/index.html进行访问  

</body>  

</html>  

创建完之后,我们进行测试,现在我的目录结构是这样的:


3、进行测试

(1) 首先我们启动服务器,使用命令node WebServer/server.js
(2) 在浏览器进行访问,在url栏中输入http://127.0.0.1:8081/WebServer/index.html

其显示效果如下所示:


后台效果如下所示:


当然,我们也能够通过访问通过http://127.0.0.1:8081/LoveYou.html访问server.js文件夹外边的文件,进行到这里,我们就可以得到文件返回给前端,但是有些同学可能会问,样式该怎么做??如下面代码,我们进行了样式的定义,修改了两个div的大小,并且给div设置边框

[html] view plain copy

<!DOCTYPE html>  

<html lang="en">  

<head>  

<meta charset="UTF-8">  

<title>index</title>  

<style>  

body {  

border: 1px solid red;  

}  

div {  

border-radius: 10px;  

width: 500px;  

height: 200px;  

border: 2px solid green;  

}  

</style>  

</head>  

<body>  

这是一个用于进行nodejs服务器测试的html文件,我们能够通过在浏览器上面输入  

http://127.0.0.1:8081/WebServer/index.html进行访问  

<div>1</div>  

<div>2</div>  

</body>  

</html>  

效果如下所示,


有了这些,我们还会问,你这样直接将样式写在html中,我可不干,我要把样式写道另外单独一个文件中,然后通过引用的方式引入,于是就会有人使用下面代码:

[html] view plain copy

<link rel="stylesheet" href="http://127.0.0.1:8081/WebServer/index.css">  


然而,这段代码并不会起作用,因为传递给前端的方式Content-Type是有问题的,需要我们的服务器进行下一步操作,也就是处理静态文件。既然传给前端时需要告诉type是css,那么我们就进行区分对待,如下面代码,我们对server.js进行修改如下:

[html] view plain copy

var http=require('http');  

var fs = require('fs');  

var url = require('url');  

//创建服务器  

http.createServer(function(request,response) {  

//解析请求,包括文件名  

var pathname= url.parse(request.url).pathname;  

//输出请求的文件名  

console.log("Request for "+ pathname + "  received.");  

//当请求static文件夹时,设置文件返回类型是text/css  

var firstDir = pathname && pathname.split('/')[2];  

var ContentType = null;  

if (firstDir && firstDir === 'static') {  

ContentType = {'Content-Type': 'text/css'};  

} else {  

ContentType = {'Content-Type': 'text/html'}  

}  

//从文件系统中去请求的文件内容  

fs.readFile(pathname.substr(1),function(err, data) {  

if(err) {  

console.log(err);  

//HTTP 状态码 404 : NOT FOUND  

//Content Type:text/plain  

response.writeHead(404, {'Content-Type': 'text/html'});  

}  

else {  

//HTTP 状态码 200 : OK  

//Content Type:text/plain  

response.writeHead(200, ContentType);  

//写会回相应内容  

response.write(data.toString());  

}  

//发送响应数据  

response.end();  

});  

}).listen(8081);  

console.log('Server running at http://127.0.0.1:8081/');  

接着,我们需要在项目中创建一个static文件夹,如下面所示结构:

在static文件夹中创建index.css文件,代码内容如下所示:

[html] view plain copy

body {  

border: 1px solid blue;  

}  

div {  

border-radius: 10px;  

width: 400px;  

height: 200px;  

border: 2px solid yellow;  

}  

也就是修改body边框为蓝色,div边框为黄色,同时我们需要更新index.html中文件内容如下所示:

[html] view plain copy

<!DOCTYPE html>  

<html lang="en">  

<head>  

<meta charset="UTF-8">  

<title>index</title>  

<link rel="stylesheet" href="http://127.0.0.1:8081/WebServer/static/index.css">  

</head>  

<body>  

这是一个用于进行nodejs服务器测试的html文件,我们能够通过在浏览器上面输入  

http://127.0.0.1:8081/WebServer/index.html进行访问  

<div>1</div>  

<div>2</div>  

</body>  

</html>  

也就是通过引入的方式将样式引入到html文件中,然后在浏览器查看内容,效果如下所示:

很明显,我们的样式已经通过引入的方式引进到html页面中了,同样的原理,我们能够进行将js也通过引入的方式进行使用,在这里我就不一一贴出代码了,看看效果如下所示:


9、nodejs 静态服务器和http服务器有什么区别

参考cnodejs.org上面的静态服务器例子,写了下面的一个nodejs静态服务器例子,里面包含cache,压缩,贴代码如下

/**
* 静态文件服务器测试例子
* User: xuwm
* Date: 13-5-17
* Time: 上午8:38
* To change this template use File | Settings | File Templates.
*/
var port=3333;
var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");
var mime = require("./mime").types;
var config = require("./config");
var zlib = require("zlib");
//创建http服务端
var server=http.createServer(function(request,response){
var obj= url.parse(request.url);
response.setHeader("Server","Node/V8");
console.log(obj);
var pathname=obj.pathname;
if(pathname.slice(-1)==="/"){
pathname=pathname+config.Welcome.file; //默认取当前默认下的index.html
}
var realPath = path.join("assets", path.normalize(pathname.replace(/\.\./g, "")));
console.log(realPath) ;
var pathHandle=function(realPath){
//用fs.stat方法获取文件
fs.stat(realPath,function(err,stats){
if(err){
response.writeHead(404,"not found",{'Content-Type':'text/plain'});
response.write("the request "+realPath+" is not found");
response.end();
}else{
if(stats.isDirectory()){
}else{
var ext = path.extname(realPath);
ext = ext ? ext.slice(1) : 'unknown';
var contentType = mime[ext] || "text/plain";
response.setHeader("Content-Type", contentType);

var lastModified = stats.mtime.toUTCString();
var ifModifiedSince = "If-Modified-Since".toLowerCase();
response.setHeader("Last-Modified", lastModified);

if (ext.match(config.Expires.fileMatch)) {
var expires = new Date();
expires.setTime(expires.getTime() + config.Expires.maxAge * 1000);
response.setHeader("Expires", expires.toUTCString());
response.setHeader("Cache-Control", "max-age=" + config.Expires.maxAge);
}

if (request.headers[ifModifiedSince] && lastModified == request.headers[ifModifiedSince]) {
console.log("从浏览器cache里取")
response.writeHead(304, "Not Modified");
response.end();
} else {
var raw = fs.createReadStream(realPath);
var acceptEncoding = request.headers['accept-encoding'] || "";
var matched = ext.match(config.Compress.match);

if (matched && acceptEncoding.match(/\bgzip\b/)) {
response.writeHead(200, "Ok", {'Content-Encoding': 'gzip'});
raw.pipe(zlib.createGzip()).pipe(response);
} else if (matched && acceptEncoding.match(/\bdeflate\b/)) {
response.writeHead(200, "Ok", {'Content-Encoding': 'deflate'});
raw.pipe(zlib.createDeflate()).pipe(response);
} else {
response.writeHead(200, "Ok");
raw.pipe(response);
}
}
}
}
});

}
pathHandle(realPath);
});
server.listen(port);
console.log("http server run in port:"+port);

首先需要在JS文件里创建一个assets的文件夹,里面放入你要浏览的静态文件,比如,index.html,demo.js等。
运行方式为:在命令行里切换到上面的JS的文件目录,然后输入 node JS文件名

10、node.js和java哪个做服务器好

没可比性。。。
一个是强类型静态,一个是弱类型动态
Node跟PHP,Ruby,Python这种动态语言比一比还可以。。。。。和JAVA,C#这种静态语言相比,就像个小玩具。
光一个动态语言特性,就决定了它不适合写大的逻辑。写个三五百行的小东西可以,想用它写个几万行的项目,就属于自己为难自己了。

与node服务器相关的知识