Nodejs服务端js的调试

前言

已有系统片上实现了一个http_server(html + easyui), 给浏览器用。
正常用时,是用STM32分析浏览器get/post过来的数据,然后回数据给socket连接。
但是调试时,如果将修改后的http_server(html)内容写入SD卡,将下位机打开,按照正常流程调试,很麻烦。
离职的同事写了一个server_test.js,在windows本地用nodejs跑起来,有关UI的部分,就可以直接在本地试验(浏览器的请求由server_test.js来模拟响应),看起来很方便。
前段时间,不需要动UI. 只是试了一下Nodejs带着server_test.js跑起来,发现只要浏览器有请求,加载的模拟server_test.js就会崩掉。时间紧,就没看具体啥原因。

这几天,我需要加些子页面到http_sever, 确实要看一下,用nodejs怎么调试server_test.js。
去查资料,看到大家用vscode + nodejs好像挺方便的。

试验

找了几本书,开始装的是appserv-x64-9.2.0.exe
将SD卡上的片上http_server资源放到WWW目录下,是能正常访问首页的。但是后续逻辑继续不下去。
发现这东西如果要响应浏览器请求,要用php写响应代码。如果不写php代码,浏览器访问片上的逻辑过不去。

想到同事写好的server_test.js, 那用Nodejs带着跑一下。
装了 node-v10.16.3-x64.msi
打开vscode(以前安装过一个旧版),升级到最新。
选择打开文件夹,到试验的http_server素材目录顶层。
打开server_test.js,直接可以下F9断点, F5跑起, F10, F11单步调试。不需要像网上资料说的那样,还要设置。

第一次跑的时候,报错退出, 看到提示是80端口被占用了,改成8081.

}).listen(8081);

当浏览器有请求时,我要先判断登陆是否正确,在Nodejs读本地json文件时报错退出。看了一下,好像是json文件编码格式不对,是(UTF8 + BOM). 用EditPlus打开,另存位UTF8.

再将server_test.js跑起时,正常响应,不会报错退出。浏览器页面上的数据也正常了。

剩下的事情,就是看easyui的书,将需要的页面元素加上去。

提供get响应的nodejs服务

整理出来一段实现,如果只是想试试easyui的界面效果,用这段就行。

// @file \http_server_for_get.js

console.log(">> http_server_for_get.js");

var http = require("http");
var	url  = require("url");
var	fs   = require("fs");
var	path = require("path");

http.createServer(function (req, res) {
	req.setEncoding('utf-8');
    var file_name = url.parse(req.url).pathname;

    if (("" == file_name) || ("/" == file_name)) {
		file_name="/default.html";
	}

    var pathname = __dirname + file_name;
    console.log("htm file path name =  " + pathname);

    if (("GET" == req.method)
        || ("get" == req.method)) {
        // get method

        fs.exists(pathname,function(exists) {
            if (exists) {
				switch(path.extname(pathname)){
					case ".htm":
                    case ".html":
                            res.writeHead(200, {"Content-Type": "text/html"});
						break;			
					case ".TXT":
						res.writeHead(200, {"Content-Type": "application/json","Pragma": "no-cache","Cache-Control": "no-cache, no-store, max-age=0","Expires":"1L"});
						break;							
					case ".js":
						res.writeHead(200, {"Content-Type": "text/javascript","Cache-control": "max-age=315360000000","Expires":"Thu, 15 Apr 2100 20:00:00 GMT"});
						break;
					case ".css":
						res.writeHead(200, {"Content-Type": "text/css","Cache-control": "max-age=315360000000","Expires":"Thu, 15 Apr 2100 20:00:00 GMT"});
						break;
					case ".gif":
						res.writeHead(200, {"Content-Type": "image/gif","Cache-control": "max-age=315360000000","Expires":"Thu, 15 Apr 2100 20:00:00 GMT"});
						break;
					case ".jpg":
						res.writeHead(200, {"Content-Type": "image/jpeg","Cache-control": "max-age=315360000000","Expires":"Thu, 15 Apr 2100 20:00:00 GMT"});
						break;
					case ".png":
						res.writeHead(200, {"Content-Type": "image/png","Cache-control": "max-age=315360000000","Expires":"Thu, 15 Apr 2100 20:00:00 GMT"});
						break;
					case ".mp3":
						res.writeHead(200, {"Content-Type": "audio/mpeg","Cache-control": "max-age=315360000000","Expires":"Thu, 15 Apr 2100 20:00:00 GMT"});
						break;						
					default:
						res.writeHead(200, {"Content-Type": "application/octet-stream"});
                }
                
                fs.readFile(pathname,function (err,data){
					res.end(data);
				});
            } else {
                res.writeHead(404, {"Content-Type": "text/html"});
				res.end("<h1>error : 404 Not Found</h1>");
            }
        });
    } else {
        // post method
    }

}).listen(8004);

// http://localhost:8004/

console.log("<< http_server_for_get.js");
发布了436 篇原创文章 · 获赞 126 · 访问量 175万+

猜你喜欢

转载自blog.csdn.net/LostSpeed/article/details/101282448
今日推荐