8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

客户端使用 localhost:PORT 与服务器通信

happymappy 2月前

51 0

我有一个小问题:客户端是否可以使用 localhost 与服务器通信?我试图这样做是为了防止用户直接访问该服务并将其用于

我有一个小问题:客户端是否可以使用 localhost 与服务器通信?

我尝试这样做是为了防止用户直接访问该服务并免费使用它。所以,我想让客户端与本地主机(托管在服务器中)通信。

此外,我还使用 JavaScript(NodeJS - ExpressJS - NextJS)和 Python(Flask)

主要问题:对此有任何解决方案吗?如果没有,还有其他方法可以阻止用户访问该服务吗?

我部署了 Express.js 和 Flask,其中 Express.js 处理 API,Flask 管理翻译等内部任务。我设置了客户端与本地主机(Flask 正在运行的地方)进行通信,以实现这些内部服务。我期望它能正常工作,但它只在我的本地机器上工作。

帖子版权声明 1、本帖标题:客户端使用 localhost:PORT 与服务器通信
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由happymappy在本站《express》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我正在开发一个 Express.js 应用程序,并尝试添加 Multer 的图像上传功能。我遇到了一些问题,因此任何形式的帮助都将不胜感激。问题:文件未上传...

    我正在开发一个 Express.js 应用程序,并尝试添加 Multer 的图像上传功能。我遇到了一些问题,因此任何形式的帮助都将不胜感激。

    问题:文件没有上传,但是当我上传 .jpg 或 .png 文件时,它会显示“错误:仅限图像!”。如果未选择任何文件,则页面上必须显示“未选择文件!”,但不知何故它就是不起作用。我尝试过的方法:在 checkFileType 函数中检查文件类型和扩展名。确保表单的 enctype 属性设置为 multipart/form-data。

    问题:图片上传时可能发生了什么?我该如何修复此错误?为什么它不会产生正确的消息?任何帮助/建议都将不胜感激!提前致谢!

    const express = require('express');
    const multer = require('multer');
    const path = require('path');
    
    const app = express();
    
    // Set storage engine
    const storage = multer.diskStorage({
      destination: './uploads/',
      filename: function(req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
      }
    });
    
    // Initialize upload
    const upload = multer({
      storage: storage,
      limits: { fileSize: 1000000 },
      fileFilter: function(req, file, cb) {
        checkFileType(file, cb);
      }
    }).single('myImage');
    
    // Check file type
    function checkFileType(file, cb) {
      // Allowed ext
      const filetypes = /jpeg|jpg|png|gif/;
      // Check ext
      const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
      // Check mime
      const mimetype = filetypes.test(file.mimetype);
    
      if (mimetype && extname) {
        return cb(null, true);
      } else {
        cb('Error: Images Only!');
      }
    }
    
    // Public folder
    app.use(express.static('./public'));
    
    // Routes
    app.post('/upload', (req, res) => {
      upload(req, res, (err) => {
        if (err) {
          res.render('index', {
            msg: err
          });
        } else {
          if (req.file == undefined) {
            res.render('index', {
              msg: 'No file selected!'
            });
          } else {
            res.render('index', {
              msg: 'File uploaded!',
              file: `uploads/${req.file.filename}`
            });
          }
        }
      });
    });
    
    // Start server
    const PORT = process.env.PORT || 5000;
    app.listen(PORT, () => console.log(`Server started on port ${PORT}`));
    
    

    **Index.html 代码**

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Image Upload</title>
    </head>
    <body>
      <h1>Upload an Image</h1>
      <form action="/upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="myImage">
        <input type="submit" value="Upload">
      </form>
      <% if (typeof msg != 'undefined') { %>
        <p><%= msg %></p>
      <% } %>
      <% if (typeof file != 'undefined') { %>
        <img src="<%= file %>" alt="Uploaded Image">
      <% } %>
    </body>
    </html>
    
    
    
    
  • 您是否可以发布一个控制台,说明文件对象是什么样子的?我暗自怀疑文件对象可能是一个数组,如果是的话,我有一个解决方案,我认为这将有助于解决您的问题。

  • 任何来自不同机器的客户端都无法访问您的本地主机,因为本地主机是一个主机,其中客户端和服务器在同一台计算机上运行。

    即便如此,为了限制服务访问,您可以实现身份验证、授权和反向代理机制。例如,JWT、OAuth、NGINX 反向代理和 API 密钥身份验证机制。

  • 原始代码中一切都很好!

    下面仅修复了非常小的缺失。

    代码修复了 mimetypes 检查问题。请检查与原始代码相同的代码。在原始代码中,它错误地引用了变量 filetypes。如果需要澄清,请发表评论。

    // Check file type
    function checkFileType(file, cb) {
      // Allowed ext
      const filetypes = /jpeg|jpg|png|gif|txt/;
      // Allowed mime
      const mimetypes = /image\/jpeg|image\/png|image\/gif/;
      // Check ext
      const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
      // Check mime
      const mimetype = mimetypes.test(file.mimetype);
    
      if (mimetype && extname) {
        return cb(null, true);
      } else {
        cb('Error: Images Only!');
      }
    }
    
  • 固定代码-完整列表:

    就全部预期功能而言,我还修复了一些其他问题。以下修复的代码已经过测试并发现有效。它成功上传图像并在浏览器中显示图像。

    先决条件:

    1. 需要安装 ejs NPM 模块。
    2. 目标文件夹 uploads 已移至公共文件夹

    如果需要澄清固定代码,请发表评论。

    服务器.js

    const express = require('express');
    const multer = require('multer');
    const path = require('path');
    
    const app = express();
    app.engine('html', require('ejs').__express);
    
    app.set('views', './public');
    app.set('view engine', 'html');
    
    // Set storage engine
    const storage = multer.diskStorage({
      destination: './public/uploads/',
      filename: function (req, file, cb) {
        cb(
          null,
          file.fieldname + '-' + Date.now() + path.extname(file.originalname)
        );
      },
    });
    
    // Initialize upload
    const upload = multer({
      storage: storage,
      limits: { fileSize: 1000000 },
      fileFilter: function (req, file, cb) {
        checkFileType(file, cb);
      },
    }).single('myImage');
    
    // Check file type
    function checkFileType(file, cb) {
      // Allowed ext
      const filetypes = /jpeg|jpg|png|gif|txt/;
      // Allowed mime
      const mimetypes = /image\/jpeg|image\/png|image\/gif/;
      // Check ext
      const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
      // Check mime
      const mimetype = mimetypes.test(file.mimetype);
    
      if (mimetype && extname) {
        return cb(null, true);
      } else {
        cb('Error: Images Only!');
      }
    }
    
    // Public folder
    app.use(express.static('./public', { index: false }));
    
    app.get('/', (req, res) => {
      res.render('index');
    });
    
    // Routes
    app.post('/upload', (req, res) => {
      upload(req, res, (err) => {
        if (err) {
          res.render('index', {
            msg: err, 
          });
        } else {
          if (req.file == undefined) {
            res.render('index', {
              msg: 'No file selected!',
            });
          } else {
            console.log('hits');
            res.render('index', {
              msg: 'File uploaded!',
              file: `uploads/${req.file.filename}`,
            });
          }
        }
      });
    });
    // Start server
    const PORT = process.env.PORT || 5000;
    app.listen(PORT, () => console.log(`Server started on port ${PORT}`));
    
  • @LunaTech,如果您有 Windows 服务器,则可以使用 Windows 防火墙设置来限制访问。例如,您可以在那里限制特定端口...

  • @LunaTech,是的,但您可以使用我之前提到的机制来限制访问。例如,如果您在网站后端实施身份验证机制,则任何客户端只有在获得授权和正确身份验证后才能访问您的网站……

返回
作者最近主题: