我正在尝试构建基本的Vue.js Express配置文件界面,该界面基于与每个用户相关联的路由参数ID返回特定用户的配置文件信息。 Vue.js中的.get()
请求设置如下:
created () {
let uri = `http://localhost:3000/users/${this.$route.params.id}`;
this.axios.get(uri).then((response) => {
this.profile = response.data;
});
},
Express.js中相应的GET
路由设置如下:
// mongodb
const mongo = require('mongodb').MongoClient;
const url = '...'; // connection url
const usersDB = 'users'; // users db name
app.get('/users/:id', function(req, res) {
let id = req.params.id;
var users;
const findUsers = function(db, callback) {
const collection = db.collection('documents');
// no query filter
collection.find({}).sort( {username: 1} )
.toArray(function(err, docs) {
users = docs;
callback(docs);
});
}
mongo.connect(url, function(err, client) {
// assert.equal(null, err);
const db = client.db(usersDB);
findUsers(db, function() {
// send users
res.status(200).send(users);
client.close();
});
});
});
在上述Express路由中,我添加了let id = req.params.id
,目的是提示该路由以基于req.params.id
的特定用户信息进行响应。我不确定如何进一步配置此路由以实际基于id返回此类信息。我尝试在路由中实现以下内容:
collection.find({_id: mongo.ObjectId(req.params.id)})
代替使用:
collection.find({}).sort( {username: 1} )
...但是那没用。知道如何设置此路由以基于req.params.id
返回数据吗?谢谢!
更新后的快速路线
// get all users
app.get('/users/:id', function(req, res) {
var o_id = new mongo.ObjectID(req.params.id))
// get all users
var users;
const findUsers = function(db, callback) {
const collection = db.collection('documents');
// no query filter
collection.find({'_id': o_id})
.toArray(function(err, docs) {
users = docs;
callback(docs);
});
}
mongo.connect(url, function(err, client) {
const db = client.db(usersDB);
findUsers(db, function() {
// send users
res.status(200).send(users);
client.close();
});
});
});
答案 0 :(得分:0)
由于ObjectId比较不起作用,似乎未返回结果。使用req.params中的ID创建新的ObjectID,然后执行collection.find应该返回结果
var o_id = new mongo.ObjectID(req.params.id);)
collection.find({'_id': o_id});