我正在尝试将数据库添加到我在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')))
答案 0 :(得分:0)
我的答案是因为它解决了你的问题:
您需要为您希望为其提供静态页面的内容以及您希望通过Ajax请求数据库请求的内容具有单独的路由。这两个网址不应重叠。
然后,静态页面和自定义路径之间不会发生冲突。您只能为每个传入请求发送一个响应,因此不清楚为什么要同时发送静态页面和数据库请求。客户端正在请求HTML页面或某些数据,而不是两者。