Node.js 将阵列从服务器发送到客户端节点

Node.js 将阵列从服务器发送到客户端节点,node.js,http,Node.js,Http,我对如何将数据从服务器发送到客户端感到非常困惑。我需要客户端javascript来访问服务器中的数组,但我不知道如何才能做到这一点 index.js var http = require('http') var fs = require('fs') let avails = [0, 0, 0]; var url = require('url'); var path = require('path'); var express = require('express'); const app = e

我对如何将数据从服务器发送到客户端感到非常困惑。我需要客户端javascript来访问服务器中的数组,但我不知道如何才能做到这一点

index.js

var http = require('http')
var fs = require('fs')
let avails = [0, 0, 0];
var url = require('url');
var path = require('path');
var express = require('express');
const app = express();

http.createServer(function (req, res) {
let route = req.url.replace('/', '')

let request_url = route === '' || route === '/' ? 'website.html' : route

var room = url.parse(req.url, true).query['r'];
var status = url.parse(req.url, true).query['f'];

avails[room] = parseInt(status);
console.log(avails);

console.log(request_url)

fs.exists(request_url, (exist) => {
    if (Boolean(exist) === false) {
        res.writeHead(404, {'content-type': 'text/html'})
        res.end('Page Not Found')
        return null
    }

    fs.readFile(request_url, function (err, data) {
        res.writeHead(200)
        res.write(data)
        res.end()
    })
   })
}).listen(8080);

app.post('/data', async (request, response) => {
    const json = JSON.stringify(avails);
    response.json(json);
});
web.html

<!DOCTYPE HTML>
<html>
<head>
    <title>Room Availability Detection System</title>
    <link rel="stylesheet" href="website.css">
</head>
<body>
    <div class="island">
        <div class="title">
            <p >Piano Room Availability</p>
        </div>
        <table id="avail">
            <tr id="rooms">
                <td>Room 1</td>
                <td>Room 2</td>
                <td>Room 3</td>
            </tr>
            <tr id="status">
                <td id="1">Available</td>
                <td id="2">Available</td>
                <td id="3">Available</td>
            </tr>
        </table>
    </div>
    <script src="./website.js"></script>
</body>

房间可用性检测系统
钢琴房可用性

1号房间 2号房间 3号房间 可用 可用 可用
如果有人能指导我如何做到这一点,我将不胜感激。提前感谢。

首先,我强烈建议您阅读本手册或一些教程。我重构了你的代码。按照您想要的方式更改导入方法,我相信您可以使用
require

从“express”导入express;
从“路径”导入路径;
常量app=express();
//后端不应全天候运行。您应该将此数据存储在
//数据库(SQL/MongoDB/anythis),或者至少在JSON文件中。
常量有效值=数组(3)。填充(0);
//解析POST请求的JSON主体
使用(express.json());
//记录器。我建议你看看npm上的“摩根”,
//这是最著名的express记录器:
//应用程序使用(摩根(“开发”))
应用程序使用((请求、恢复、下一步)=>{
控制台日志(请求路径);
next();
});
//您应该将“website.html”移动到“public/website.html”
//“public/”中的每个文件都可以静态访问。
//如果我理解正确的话,你还想提供其他文件。
//把它们也放在那里。
app.use(“/”,express.static(path.join(uu dirname,“public”));
//使用get,而不是post!您不是在创建数据,而是在获取数据
app.get(“/avails”,(req,res)=>res.json(avails));
//此路径用于更新房间的状态。安全方面,
//这不是很好,因为数组可以被一个
//远程客户端,但它可以工作。例子:
//POST/rooms/2/状态{值:2}
app.post(“/rooms/:rooms/status)”,(请求、回复)=>{
if(请求正文的类型[“值”!=“编号”)
返回res.status(400).json({message:“未指定有效的新值”});
施工房间=+要求参数[“房间”];
const newStatus=req.body[“value”];
可用[房间]=新闻状态;
日志(“新的可用性:”,可用性);
res.json({message:“Success!”,avails});
});
//连接到端口3000
app.listen(3000,()=>console.log(“服务器准备就绪”);
弃用警告 现在,快速记下你不应该使用的东西。我之所以添加这个,是因为上面的代码没有替换这些方法,而是避免了它们

  • 请正确使用express,但我认为您现在已经掌握了:
    • 尽可能使用
      express.static()
      中间件处理静态文件
    • 使用中间工具
    • 正确使用
      req
      res
      对象。简单是你的朋友
  • url.parse
    已弃用,您应该使用,并从其
    searchParams
    属性获取搜索参数
  • fs.exists
    也不推荐使用
  • 前端 您可以使用API向后端发出请求

    constroot=”http://localhost:3000"; // 或者不管你的后端URL是什么
    异步函数getAvails(){
    const url=新url(“/avails”,root.).href;
    const body=await fetch(url).then(res=>res.json());
    返回body.data;
    }
    异步函数setRoomState(房间,值){
    constURL=新url(`/rooms/${roome}/status`,root);
    const body=await fetch(url,{method:“POST”,body:{value})。然后(res=>
    res.json()
    );
    //返回新的有效值
    返回body.avails;
    }
    //您可以在任何地方使用这些功能
    
    关于你的项目的旁注 如果你的项目是关于计算房间里的人数,也许你会想看看我的一个老(小)项目,echo。这是用TypeScript编写的后端,可能会有所帮助