node.js笔记

什么是node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。 Node 是一个让 JavaScript 运行在服务端的开发平台。

模块和包的区别
在这里插入图片描述
Package.json文件的作用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实现一个简单的http服务器

var http = require('http');
var path = require('path');
var fs = require('fs');
var mime = require('mime');
http.createServer(function(req, res) {
  res.render=function(filename){
    fs.readFile(filename, function(err, data) {
      if (err) {
        res.end('文件不存在');
      } else {
        res.setHeader('Content-Type', mime.getType(filename));
        res.end(data);
      }
    })
  };
  if (req.url === '/' || req.url === '/index.html') {
    res.render(path.join(__dirname, 'publish', req.url));
  } else if (req.url === '/show.html') {
    res.render(path.join(__dirname, 'publish', req.url));
  } else {
    res.render(path.join(__dirname, 'publish', req.url));
  }
}).listen(9090, function() {
  console.log("http://localhost:9090")
})

模块化
关注的点:
1、该模块要封装什么代码
2、代码有用到外部的数据吗?如果用到,是否需要通过参数将数据传递到当前模块中
3、当前模块需要对外暴露的东西(module.exports)的值

将上述代码模块化:

var http = require('http');
var context=require('./context.js')
var router=require('./router.js')
var config=require('./config.js')
http.createServer(function(req, res) {
  //获取资源目录
  context(req,res);
  router(req,res);
}).listen(config.port, function() {
  console.log("http://localhost:9090")
})

context.js

var fs = require('fs');
var mime = require('mime');
module.exports=function(req,res)
{
  res.render=function(filename){
    fs.readFile(filename, function(err, data) {
      if (err) {
        res.end('文件不存在');
      } else {
        res.setHeader('Content-Type', mime.getType(filename));
        res.end(data);
      }
    })
  };
}

router.js

var path = require('path');
var config=require('./config.js')

module.exports=function(req,res){
  if (req.url === '/' || req.url === '/index.html') {
    res.render(path.join(config.publishPath, req.url));
  } else if (req.url === '/show.html') {
    res.render(path.join(config.publishPath, req.url));
  } else {
    res.render(path.join(config.publishPath, req.url));
  }
}

config.js

var path=require('path')
module.exports={
  "port":9090,
  "publishPath":path.join(__dirname, 'publish')
}

node.js的开发框架 express
express的特点:
1、实现了路由功能
2、中间件功能
3、对req和res对象的扩展
4、可以集成其他模板引擎

res.send()和res.end()的区别在这里插入图片描述
express实现helloworld

var express=require('express');
var app=express();
app.get('/',function(req,res){
  res.send("helloworld");
})
app.listen(9091,function(){
  console.log("http://localhost:9092");
})

app.get与app.use
app.get的请求需要与路由规则严格匹配,而app.use只需要请求的根路径与路由规则匹配
app.all
请求方式不确定,请求路径需要与路由规则严格匹配

实现服务器

index.js

var express=require('express');
var path=require('path');
var router=require('./router.js')
var app=express();
app.use('/',router);
app.listen(9093,function(){
  console.log("http://localhost:9091");
})

router.js

var express=require('express');
var path=require('path');
var handle=require('./handle.js')
var router=express.Router();
router.get('/index',function(req,res){
  handle(req,res,'index.html');
});
router.get('/show',function(req,res){
  handle(req,res,'show.html');
})
router.use('/resources',express.static(path.join(__dirname,'resources')));

module.exports=router;

handle.js

var path=require('path');
var fs=require('fs');
module.exports=function(req,res,name){
  var filename=path.join(__dirname,'publish',name);
    fs.readFile(filename, function(err, data) {
      if (err) {
        res.end('文件不存在');
      } else {
        res.end(data);
      }
    });
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值