【发布时间】:2019-02-13 06:26:02
【问题描述】:
我正在开发一个带有 node.js、jQuery、mongoose 和 MongoDB 的购物网站的 SPA 网站。 从 index.html 文件开始时,ajax 请求和响应可以完美运行。例如,从http://localhost:3000 开始,有人点击了一个名为“产品”的链接,我向服务器发送了一个 ajax 请求,服务器异步发送回必要的产品信息,从而导致http://localhost:3000/products。但问题是,如果有人直接在搜索栏中输入http://localhost:3000/products,它会显示产品的 json 表示。
这是我的代码:
script.js
function redirect (link) {
$.ajax({
type: 'GET',
url: 'http://localhost:3000/' + link,
contentType: 'application/json',
data: {
link
},
success: function (res) {
let container = $('#contentToSwap');
container.html('');
res.products.forEach(function (products_) {
...
});
}
});
}
app.js
var Product = require('./models/product');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var path = require('path');
var express = require('express');
var app = express();
mongoose.connect('mongodb://localhost:27017/shopping');
var PORT = process.env.PORT || 3000;
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.get('*', function(req, res) {
Product.find(function(err, docs) {
let productChunks = [];
let chunksize = 4;
let display = [];
for (var i = 0; i < docs.length; i++) {
if (docs[i].productType == req.query.link) display.push(docs[i]);
}
for (var i = 0; i < display.length; i += chunksize) {
productChunks.push(display.slice(i, i + chunksize));
}
res.send({ products: productChunks });
});
});
app.listen(PORT, function () {
console.log('Listening on port ' + PORT);
});
所以如果用户没有从 index.html 文件开始,我需要某种前端路由。我知道我可以编写自己的路由器来正确路由 url,并且我可以将所有请求路由回 index.html,如
app.get('*', function(req, res) {
res.sendFile(__dirname + '/public/index.html');
});
但是当有人单击链接时,我无法从服务器加载所有必要的产品信息。所以我对如何解决这个问题有点困惑。任何帮助表示赞赏
【问题讨论】:
-
尝试将
type: 'GET'改为type: 'POST'
标签: javascript jquery node.js