Nodejs如何实现提供cgi服务的后台,根据请求路由调用不同方法返回json数据给前台?
Nodejs如何实现提供cgi服务的后台,根据请求路由调用不同方法返回json数据给前台?
不用express的话,只用node可以做到么? 我现在只知道用http创建一个服务端: http.createServer(function(req, res) { res.end(‘hello world’); }); 但是怎么根据不同的url来写不同的逻辑处理代码呢? 比如我想: svr.get(’/’, function(req, res) { //业务处理1 //返回给前台json });
- 不清楚怎么用nodejs根据不同的url来进入不同的处理模块
- 我不清楚怎么返回json给前台
- 在上面这段代码里,业务处理1应该是一个异步的代码吧,不然如果并发量大,就会堵塞服务器,但是怎么样把业务处理1变成异步的代码呢?直接包一层setImmediate吗? 谢谢~
当然可以!我们可以使用 Node.js 的内置 http
模块来创建一个简单的 CGI 服务,并根据不同的 URL 路由调用不同的处理逻辑。为了更好地处理异步操作并返回 JSON 数据,我们可以使用一些辅助库,例如 querystring
来解析查询字符串。
以下是一个完整的示例代码:
const http = require('http');
const url = require('url');
const querystring = require('querystring');
const server = http.createServer((req, res) => {
// 解析请求的 URL
const parsedUrl = url.parse(req.url);
const path = parsedUrl.pathname;
const query = querystring.parse(parsedUrl.query);
// 根据不同的路径调用不同的处理函数
switch (path) {
case '/':
handleHome(req, res);
break;
case '/api/data':
handleData(req, res, query);
break;
default:
sendResponse(res, 404, { error: 'Not Found' });
break;
}
});
function handleHome(req, res) {
// 业务处理1:模拟异步操作
setTimeout(() => {
const data = { message: 'Hello from Home!' };
sendResponse(res, 200, data);
}, 1000);
}
function handleData(req, res, query) {
// 业务处理2:模拟异步操作
setTimeout(() => {
const data = {
query: query,
message: 'Hello from Data API!'
};
sendResponse(res, 200, data);
}, 1000);
}
function sendResponse(res, statusCode, data) {
res.writeHead(statusCode, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(data));
}
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
代码解释
-
创建 HTTP 服务器:
- 使用
http.createServer
创建一个 HTTP 服务器。 - 在回调函数中,解析请求的 URL 并根据路径调用不同的处理函数。
- 使用
-
解析 URL:
- 使用
url.parse
解析请求的 URL。 - 获取路径
pathname
和查询参数query
。
- 使用
-
路由处理:
- 使用
switch
语句根据不同的路径调用不同的处理函数。
- 使用
-
处理函数:
handleHome
和handleData
是两个示例处理函数,它们模拟了异步操作(通过setTimeout
)并返回 JSON 数据。- 这些处理函数中的业务逻辑可以根据实际需求进行修改。
-
发送响应:
sendResponse
函数用于设置响应头并发送 JSON 数据。- 使用
res.writeHead
设置状态码和内容类型。 - 使用
res.end
发送 JSON 格式的响应体。
-
启动服务器:
- 使用
server.listen
启动服务器,并监听指定端口(例如 3000)。
- 使用
这样,你就可以根据不同的 URL 路径调用不同的处理逻辑,并返回 JSON 数据给前端。
干吗不用 express ?不用的话,首先你得自己搞一套简单的路由系统出来。
论把 npm 上 Top 100 的库混个脸熟的重要性:https://www.npmjs.org/browse/depended 你的需求主要用到 express 和 async
1.var url = require(‘url’); switch(url.pathname){ case ‘/’ : do1(); case ‘/create’: do2(); … } 2.前端用HTTP Get从restful接口获得json数据。 3.是不是router后都丢给promise可以满足你的要求,我没试过做这种需求。
大家觉得用express比较方便咯? 我只是想只看只用nodejs怎么实现 我去看看express怎么搞 谢谢~
话说有人了解过这个么: http://hapijs.com/ 这个有什么特点呢? 跟express相比有什么优势劣势?