由浅入深node.js(一)

本文介绍Node.js的基础操作,包括创建简单应用、理解模块化及路由处理等核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初识node.js

1.新建Hello.js 输入以下代码:

console.log("Hello World");

 

  • 运行:在 cmd 控制台使用 node 命令 运行
  • 得到效果如下:

 

 2.构建一个基础服务器

  • 新建server.js输入以下代码:
var http = require("http");//获取http模块赋值给http变量

http.createServer(function(request, response){
  console.log("Request received.");
  response.writeHead(200, {"Content-Type": "text/plain"});//设置响应
  response.write("Hello World");
  response.end();
}).listen(8888);//监听端口号

 

  • 运行,然后在浏览器中输入地址:http://locathost:8888/
  • 得到效果如下:

 

 

正确的是输出一个“Request received.”,上示图例中之所以出现了两次,是因为谷歌浏览器除了请求了http://locathost:8888/,还请求了http://localhost:8888/favicon.ico,证据如下:

 

 3.使用函数进行传递

  • node.js的特色之一,能够传递函数用它的名字把一个函数作为变量传递。但是我们不一定要绕这个“先定义,再传递”的圈子,我们可以直接在另一个函数的括号中定义和传递这个函数。
  • 新建newServer.js输入以下代码:
var http = require("http");

function onRequest(request,response){
  console.log("Request received.");   
  response.writeHead(200, {"Content-Type": "text/plain"});//设置响应
  response.write("Hello World");   response.end();
}
http.createServer(onRequest).listen(8888);

 

以上是对server.js的改造

事实上,可以用下面这个例子来说明不同之处在哪里:

function say(value){
  console.log(value);
}
function execute(fun,value){
  fun(value);
}
execute(say,"ok");

 

从以上示例可以看出,node.js能够用函数名将一个函数传递

 4.区分执行顺序

以下代码:

var http = require("http");
function onRequest(request, response) {
        console.log("Request received.");
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.write("Hello World");
        response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Request has received.");

 

会得到以下输出:

原因是当执行 node 命令时,9行代码执行输出,而3行代码值有在监听到8888端口时,才会被执行。(省略去烦人的favicon.ico输出)

5.node.js的模块化

  • 我们把我们的服务器脚本放到一个叫做 start 的函数里,然后我们会导出这个函数。

代码如下:

server.js

var http = require("http");

function start() {
  function onRequest(request, response) {
    console.log("Request received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}
//exports.start是输出名为start的方法,赋值号右边的start是上边的函数名。
exports.start = start;

 

使用模块的方法:

 

var server = require("./server");//使用相对路径,加载server模块

server.start();//调用模块的对应方法

 

  1. 区分不同的url,执行不同的代码
  • 新建一个模块requestHandlers,内含对应不同的url有不同的方法,代码如下:
function start() {
  console.log("Request handler 'start' was called.");
}

function upload() {
  console.log("Request handler 'upload' was called.");
}

exports.start = start;
exports.upload = upload;

 

  • 在主文件里引用,并且将requestHandlers的方法赋予给一个对象
var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");

var handle = {}
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;

server.start(router.route, handle);

 

  • 相应的我们的服务器模块server需要处理额外的信息——url对象
var http = require("http");
var url = require("url");//引用url模块

function start(route, handle) {
  function onRequest(request, response) {
    //将请求中的url字符串转换成url对象之后获取pathname赋值给变量
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    //将获取到的pathname交给route处理
    route(handle, pathname);

    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

 

  • route模块
function route(handle, pathname) {
  console.log("About to route a request for " + pathname);
  if (typeof handle[pathname] === 'function') {
    handle[pathname]();
  } else {
    console.log("No request handler found for " + pathname);
  }
}

exports.route = route;

 

posted on 2018-03-08 10:03 昵称被喵掉了 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/bootstrapResolve/p/8526722.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值