[英]How i can set cookie and json in server response and redirect to client url/ PassportJS NodeJS
[英]How do I set up a nodejs server that gives the client the correct file by checking the url?
我正在尝试编写节点js服务器,如果资源在文件系统中,则返回用户请求的任何内容。
例如,如果请求URL是/index.html
,它将尝试在根目录中找到名为“index.html”的文件,并使用该文件的流进行响应。 如果请求是/myscript.js
,它会做同样的事情,找到一个名为myscript.js
的文件并将其传递给响应。
这是我到目前为止:
var http = require("http");
var fs = require("fs");
var port = process.env.PORT || 3000;
http.createServer(function (request, response) {
if (request.method == "GET") {
console.log(request.url);
if (request.url == "/") { // if the url is "/", respond with the home page
response.writeHead(200, {"Content-Type": "text/html"});
fs.createReadStream("index.html").pipe(response);
} else if (fs.existsSync("." + request.url)) {
response.writeHead(200/*, {"Content-Type": request.headers['content-type']}*/);
fs.createReadStream("." + request.url).pipe(response);
} else {
response.writeHead(404, {"Content-Type": "text/plain"});
response.end("404 Not Found");
}
} else {
response.writeHead(404, {"Content-Type": "text/plain"});
response.end("404 Not Found");
}
}).listen(port);
// Console will print the message
console.log('Server running at http://127.0.0.1:' + port +'/');
关于这段代码我有一些不喜欢的事情:
fs
认为每当路径以/
开头时,文件就不存在,所以我必须添加一个.
在文件路径之前。 见第10和第12行。这总是有效吗? 我觉得这是解决这个问题的一个非常糟糕的伎俩。 解决你的两个要点:
.
使用fs
因为fs
会查看系统的根目录。 请记住,系统根目录与服务器根目录不同。 path.extname
然后使用switch
语句来设置内容类型。 下面的代码来自我写的关于如何使用Node而不是Express设置简单静态服务器的博客文章 :
let filePath = `.${request.url}`; // ./path/to/file.ext
let ext = path.extname(filePath); // .ext
let contentType = 'application/octet-stream'; // default content type
if(ext === '') {
filePath = './index.html'; // serve index.html
ext = '.html';
}
switch (ext) {
case '.html':
contentType = 'text/html';
break;
case '.css':
contentType = 'text/css';
break;
case 'js':
contentType = 'text/javascript';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.