【NodeJS】服务器搭建

Node服务器搭建

一. 静态服务器搭建

  • 先说一下端口:比如一台电脑上可以部署多个服务器,通过本地回环地址(127.0.0.1/localhost)可以找到电脑,然后通过端口区分不同的服务器。

    • 默认的http端口是80,Apache配置web服务器用的就是默认的80端口。默认的80端口可以省略

    • 我们搭建服务器不要去占用公认端口(0~1023),用大于这个范围的端口一般没有被占用。

      当然大于这个范围也有被占用的端口,例如:

      3306端口:MYSQL数据库端口
      5432端口:postgresql数据库端口
      6379端口:Redis数据库端口
      8080端口:TCP服务端默认端口
      8888端口:Nginx服务器的端口
      9200端口:Elasticsearch服务器端口
      27017端口:mongoDB数据库默认端口
      22122端口:fastdfs服务器默认端口

  • 搭建一个简单的服务器,返回html页面

  • 返回页面,请求那个页面返回那个页面

    执行过程:

    1. 首先游览器发送请求到服务器
    2. 服务器从游览器的请求中获取要的是哪一个资源,然后在服务器的资源中查找有没有所要的资源
    3. 如果有则返回那个资源给游览器,没有则返回404页面
    // 创建服务器
    const sever = http.createServer((request, response)=>{
        // 设置返回给用户的内容
    	// console.log(request); // 请求内容
        // console.log(request.url); // url包含请求的资源名字
        
        // 拼接要读取的文件路径
        const filePath = path.join(__dirname,'web',request.url);
    })
    

    这里的request就是请求内容,request里的url包含请求的资源名字

    用request.url来拼接路径就可以得到要读取的资源路径

  • 静态资源服务器完整代码:

    // 导入模块
    const path = require('path');
    const http = require('http');
    const fs = require('fs');
    
    // 创建服务器
    const sever = http.createServer((request, response)=>{
        // 设置返回给用户的内容
    
        // 1. 获取用户请求的是那个页面
        const filePath = path.join(__dirname,'web',request.url);
    
        // 2.读取文件的内容
        fs.readFile(filePath,(err,data)=>{
            if(err == null){
                response.end(data);
            }else{
                response.end('404 not found' + err)
            }
        })
    })
    
    // 开启服务器
    sever.listen(8088,()=>{
        console.log('8088服务器开启了...')
    })
    

    这里的fs.readFile()里不要加‘utf-8’。如果加了会导致无法识别别的类型文件

    • 服务器有一个嗅探功能:会根据请求的资源名字,自动获取要请求什么类型的资源类型
  • 美化404页面

    • 可以准备一个404页面然后response.end返回

    • 也可以直接用模板字符串

      const path = require('path');
      const http = require('http');
      const fs = require('fs');
      
      // 创建服务器
      const sever = http.createServer((request, response)=>{
          // 设置返回给用户的内容
      
          // 1. 获取用户请求的是那个页面
          const filePath = path.join(__dirname,'web',request.url);
      
          // 2.读取文件的内容
          fs.readFile(filePath,(err,data)=>{
              if(err == null){
                  response.end(data);
              }else{
                  response.end(`
                      <!DOCTYPE html>
                      <html lang="en">
                      <head>
                          <meta charset="UTF-8">
                          <meta name="viewport" content="width=device-width, initial-scale=1.0">
                          <title>Not Found</title>
                      </head>
                      <body>
                          <h1 style="color: red;">404 Not Found</h1>
                          <p>${err}</p>
                      </body>
                      </html>
                  `)
              }
          })
      })
      
      // 开启服务器
      sever.listen(8088,()=>{
          console.log('8088服务器开启了...')
      })
      
  • 服务器补充

    • 页面上所有的外部资源(图片,css文件,js文件)都要向服务器发送请求来获取

    • 所以为了节省加载时间,如果有多个图片最好能整合成一张精灵图

    • 会自动请求一个favicon.ico,这是标签页的图标

    • 后端路由:就是写接口

      // 导包
      const express = require('express');
      const bodyParser = require('body-parser');
      var multer = require('multer');
      
      // 创建服务器
      const app = express()
      
      // 用包创建一个uploads文件夹
      var upload = multer({ dest: 'uploads/' })
      
      // 转换格式
      app.use(bodyParser.urlencoded({ extended: false }))
      
      // 注册接口
      app.post('/register', (req, res) => {
          // 注册相关逻辑
          res.send('测试post接口');
      })
      
      // 登录接口
      app.post('/login', (req, res) => {
          // 注册相关逻辑
          res.send('测试post接口');
      })
      
      // 获取所有英雄接口
      app.get('/getAllHero', (req, res) => {
          // 获取所有英雄
          res.send('测试post接口');
      })
      
      // 删除英雄接口
      app.get('/deleteHero', (req, res) => {
          // 获取所有英雄
          res.send('测试post接口');
      })
      
      // 开启服务器
      app.listen(8080, () => {
          console.log('服务器已开启')
      })
      

二. 参数传递get和post

  • get和post的区别

    1. get传值是通过url传值,而post是通过请求体传递的(guerystring)
    2. get传递的数据相对较小,而post传递的数据相对而言比较大
    3. get传值由于是在url中传递的,所以安全性较低.
      post传值安全性相对而言高- -点
    4. get-般用于请求数据/获取数据
      post-般用于提交数据
  • get:数据拼接在URL上面

    http://127.0.0.1:8089/?id=123456&&password=10086

    • 可以用require.url拿到,但要处理字符串

       // 导入模块 
      const http = require('http');
      const url = require('url');
      
      const sercer = http.createServer((require,Response)=>{
         let urlObj = url.parse(require.url,true);
          
         Response.end(JSON.stringify(urlObj.query)); 
         // {"id":"123456","password":"10086"}
      })
      
      sercer.listen(8089,()=>{
           console.log('8089服务器开启了')
      })
      

      可以使用url模块调用pars方法来处理字符串

      • 第一个参数: 要处理的url
      • 第二个参数: 如果为true则返回一个对象

      会返回一个url对象,里面有query

      query: [Object: null prototype] { id: ‘123456’, password: ‘10086’ }

  • post:数据不是拼接在url上, 存在请求体中

    • 传给后端不会一下传过去,会把数据分成很多块,一小块一小块的传

      如果要接收,

      1. 首先要有一个容器
      2. 然后给require一个data事件(执行很多次),把这些小块数据拼起来
      3. 给require一个end事件(只执行一次),表示数据传递完了
      4. 处理数据 queryString.parse()
      // 导入模块
      const http = require('http');
      const queryString = require('querystring');
      
      // 创建服务器
      const server = http.createServer((request, response) => {
          // 创建一个容器
          let postData = '';
          
          // 然后给require一个data事件
          request.on('data',(chunk)=>{
              postData += chunk
          })
          
          // 给require一个end事件
          request.on('end',()=>{
              console.log(postData);
              // 用queryString.parse()处理数据
              let postObj = queryString.parse(postData);
              console.log(postObj);
          })
          
          response.end('测试')
      })
      
      // 开启服务器
      server.listen(8088, () => {
          console.log('服务器开启了:8088')
      })
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以用于搭建Web服务器。首先,你需要安装Node.js和npm(Node包管理器)。然后,你可以按照以下步骤来搭建一个简单的Node.js Web服务器: 1. 创建一个新的项目文件夹,并在该文件夹中初始化一个新的Node.js项目。可以使用以下命令:`npm init`。这将创建一个package.json文件,其中包含了你的项目的相关信息。 2. 在项目文件夹中创建一个名为`service.js`的文件,该文件将作为你的服务器代码的入口文件。 3. 在`service.js`文件中引入所需的模块,例如`express`和`mongoose`。你可以使用`require`语句来引入模块,如下所示: ``` const express = require("express"); const mongoose = require("mongoose"); ``` 4. 设置连接到数据库的配置。你可以在`service.js`文件中引入数据库配置,并通过使用`mongoose.connect()`方法来连接到数据库: ``` const db = require("./config/keys").mongoURL; mongoose.connect(db, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log("连接成功")) .catch(err => console.log("连接错误")); ``` 5. 创建一个Express应用程序实例,并将其分配给一个变量,例如`app`: ``` const app = express();``` 6. 定义路由。你可以使用`app.get()`或`app.post()`等方法来定义不同的路由和请求处理程序。例如,以下代码定义了一个根路由,当用户访问根路径时,发送"hello world"响应: ``` app.get("/", (req, res) => { res.send("hello world"); }); ``` 7. 使用路由。你可以将路由模块导入并在应用程序中使用它们。例如,以下代码将在`/api/users`路径下使用`users`路由模块: ``` const users = require("./routes/api/users"); app.use("/api/users", users); ``` 8. 启动服务器并监听指定的端口。你可以使用`app.listen()`方法指定要监听的端口,并在服务器启动时执行一些操作。例如,以下代码将服务器监听在5000端口,并在服务器启动时打印一条消息: ``` const port = process.env.PORT || 5000; app.listen(port, () => { console.log(`服务运行在端口 ${port}`); }); ``` 现在,你可以在终端中运行`node service.js`命令来启动你的Node.js服务器。通过访问`http://127.0.0.1:5000/`,你应该能够看到"hello world"的响应。 另外,如果你想在代码更改时自动重启服务器,你可以安装`nodemon`模块,并将其作为开发依赖项添加到`package.json`文件中。然后,你可以使用`nodemon service.js`命令来启动服务器,这样在你修改代码后不需要手动重启服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值