Nodejs服务端js的调试
发布日期:2021-06-30 22:01:41 浏览次数:2 分类:技术文章

本文共 3518 字,大约阅读时间需要 11 分钟。

前言

已有系统片上实现了一个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.jsconsole.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("

error : 404 Not Found

"); } }); } else { // post method }}).listen(8004);// http://localhost:8004/console.log("<< http_server_for_get.js");

转载地址:https://lostspeed.blog.csdn.net/article/details/101282448 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:STM32F407串口操作
下一篇:How to: Launch the Debugger Automatically

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月09日 06时43分07秒