提供静态内容而不会停止跟随中间件 - Express

时间:2018-01-22 04:57:13

标签: node.js express

我正在尝试将数据库添加到我在javascript中制作的蛇游戏中,我将它托管在heroku上并使用express来提供静态内容。我遇到的问题是虽然我可以在mlab上将数据发布到我的数据库,但是当在GET请求之前提供静态内容时,我无法获得结果。但是,如果我在GET请求之后添加它,除了我的页面上的GET响应之外我什么也得不到。我需要加载静态内容,然后是GET请求以返回之前的分数。

示例:

app.get('/', (req, res) => {
db.collection('scores')
  .find({}, {sort: {_id: -1}})
  .toArray((error, accounts) => {
    if (error) return next(error)
    res.send(accounts)
 })
})
app.use(express.static(__dirname));

将从数据库返回正确的数据,但不会提供静态内容,并且反转顺序将加载静态内容,但后续的GET请求将导致返回页面中的html。

HTML看起来像这样

<head>
    <meta charset="utf-8">
    <title>Snake</title>
    <link rel="stylesheet" type="text/css" href="/style.css">
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'">
</head>

<body onload="init()">
    <canvas id="myCanvas"> </canvas>
    <script src="/script.js"></script>
</body>

我删除了../server.js因为我意识到它不需要,我使用以下行提供静态内容

app.use('/static', express.static(path.join(__dirname,'static')))

1 个答案:

答案 0 :(得分:0)

我的答案是因为它解决了你的问题:

您需要为您希望为其提供静态页面的内容以及您希望通过Ajax请求数据库请求的内容具有单独的路由。这两个网址不应重叠。

然后,静态页面和自定义路径之间不会发生冲突。您只能为每个传入请求发送一个响应,因此不清楚为什么要同时发送静态页面和数据库请求。客户端正在请求HTML页面或某些数据,而不是两者。