jQuery Ajax/JSON前端与MongoDB或CouchDB数据库的交互通常需要一个中间件层,因为浏览器端的JavaScript不能直接连接这些NoSQL数据库。中间件充当了前端和后端数据库之间的桥梁,处理安全认证、数据转换和业务逻辑。
// 后端Express中间件
const express = require('express');
const mongoose = require('mongoose');
const app = express();
// 连接MongoDB
mongoose.connect('mongodb://localhost:27017/mydb', {useNewUrlParser: true});
// 定义数据模型
const Item = mongoose.model('Item', { name: String, value: Number });
// 创建REST API
app.get('/api/items', async (req, res) => {
const items = await Item.find();
res.json(items);
});
app.post('/api/items', async (req, res) => {
const newItem = new Item(req.body);
await newItem.save();
res.json(newItem);
});
app.listen(3000);
// 前端jQuery代码
$.ajax({
url: '/api/items',
type: 'GET',
dataType: 'json',
success: function(data) {
console.log('获取数据:', data);
// 处理数据...
}
});
// 提交数据
$.ajax({
url: '/api/items',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({name: "New Item", value: 100}),
success: function(data) {
console.log('创建成功:', data);
}
});
// 后端Express中间件
const express = require('express');
const nano = require('nano');
const app = express();
const couch = nano('http://localhost:5984');
const db = couch.db.use('mydb');
app.get('/api/docs', async (req, res) => {
const docs = await db.list({include_docs: true});
res.json(docs.rows.map(row => row.doc));
});
app.post('/api/docs', async (req, res) => {
const response = await db.insert(req.body);
res.json(response);
});
app.listen(3000);
原因:浏览器安全策略阻止跨域请求
解决方案:
// 在Express中间件中添加CORS支持
const cors = require('cors');
app.use(cors());
原因:前端发送的数据格式不符合要求
解决方案:
// 在中间件中添加验证
app.post('/api/items', express.json(), (req, res) => {
if (!req.body.name || !req.body.value) {
return res.status(400).json({error: "缺少必要字段"});
}
// 处理有效数据...
});
原因:大量数据请求导致响应慢
解决方案:
// 分页示例
app.get('/api/items', async (req, res) => {
const page = parseInt(req.query.page) || 1;
const limit = parseInt(req.query.limit) || 10;
const items = await Item.find()
.skip((page - 1) * limit)
.limit(limit);
res.json(items);
});
通过这种架构,前端可以专注于UI和用户体验,而后端处理数据存储和业务逻辑,实现清晰的责任分离。