#javascript #node.js #mongodb #vue.js #vuetify.js
#javascript #node.js #mongodb #vue.js #vuetify.js
Вопрос:
У меня есть страница, которая загружает данные в таблицу из базы данных Mongodb.
То, что я пытаюсь сделать, это щелкнуть строку таблицы, а затем перейти на другую страницу.
Я сделал обработчик событий для маршрутизации другой страницы при ее нажатии.
и установите точно такой же исходный код страницы с другим именем файла vue.
на исходной странице данные загружаются хорошо, но на другой маршрутизируемой странице отображается ошибка HTTP 404
порядок программы такой
User_Management.vue --(click table row)--> User_Management_detail.vue (url:/row.id)
└>PostService.js └>PostService.js
└> post_users.js └> post_users.js
и страница User_Management, и страница _detail.vue имеют одинаковый код.
но url отличается (User_Management_detail/:id)
это ошибка HTTP
GET http://localhost:8080/User_Management_detail/api/posts_users/ 404 (Not Found)
<<router/index.js >>
import Vue from "vue";
import VueRouter from "vue-router";
import Home from "../views/Home.vue";
Vue.use(VueRouter);
const routes = [
{
path: "/User_Management",
name: "User_Management",
component: () =>
import(/* webpackChunkName: "about" */ "../views/User_Management.vue"),
},
{
path: "/User_Management_detail/:id",
name: "User_Management_detail",
component: () =>
import("../views/User_Management_copy.vue")
},
];
const router = new VueRouter({
mode: "history",
base: process.env.BASE_URL,
routes
});
export default router;
<<Управление пользователем/User_Management_detail.vue>>
<template>
<v-app
:style="{ background: $vuetify.theme.themes.light.background }"
style="max-height:100vw;"
>
<v-container style="width: 97%">
<v-card>
<v-card-title>
Users
<v-spacer></v-spacer>
<v-col class="text-right">
<v-dialog v-model="dialog" max-width="500px">
<p class="error" v-if="error">{{ error }}</p>
<v-data-table
v-model="selected"
:headers="headers"
v-bind:index="posts.index"
v-bind:item="posts.post"
:items="posts"
:single-expand="singleExpand"
:expanded.sync="expanded"
:sort-by.sync="sortBy"
:sort-desc.sync="sortDesc"
item-key="_id"
show-select
show-expand
:search="search"
class="[item.selected amp;amp; 'selected']"
@click:row="handleClick"
>
</v-data-table>
</v-card>
</v-container>
</v-app>
</template>
<script>
import PostService from "../PostService";
export default {
components: {},
name: "PostComponent",
data() {
return {
posts: [],
error: "",
text: "",
sortBy: 'users_docs[0].createdAt',
sortDesc: true,
headers: [
{ text: "User G_ID", value: "_id" },
{ text: "User ID", value: "users_docs[0].userID" },
{ text: "First Name", value: "users_docs[0].firstName" },
{ text: "Last Name", value: "users_docs[0].lastName" },
{ text: "Department", value: "users_docs[0].department" },
{ text: "Role", value: "users_docs[0].role" },
{ text: "Status", value: "users_docs[0].status" },
{
text: "Enrollment Time",
value: "users_docs[0].createdAt".toString()
},
{ text: "Actions", value: "actions", sortable: false }
],
deviceName: ""
}
};
},
async created() {
try {
this.posts = await PostService.get_Users_Posts();
} catch (err) {
this.error = err.message;
}
},
methods: {
handleClick(row) {
console.log(row.users_docs[0]._id);
alert(row.users_docs[0]._id)
this.$router.push({path: `/User_Management_detail/:${row.users_docs[0]._id}`})
}
}
};
</script>
<< postService.js >>
import axios from "axios";
const url_users = "api/posts_users/";
class PostService {
// get users posts
static get_Users_Posts() {
return new Promise(async (resolve, reject) => {
try {
const res = await axios.get(url_users);
const data = res.data;
resolve(
data.map((post) => ({
...post,
//createdAt: new Date(post.createdAt),
}))
);
} catch (err) {
reject(err);
}
});
}
}
export default PostService;
<< post_users.js >>
const express = require('express');
const mongodb = require('mongodb');
const router = express.Router();
// Get User Posts
router.get('/', async(req, res) => {
const posts = await loadPostsCollection_Users();
res.send(await posts.find({}).toArray());
});
async function loadPostsCollection_Users() {
const client = await mongodb.MongoClient.connect('mongodb://ipAddr:port/tms', {
useNewUrlParser: true
});
return client.db('tms').collection('integrated_users');
}
module.exports = router;
Комментарии:
1. В вашем маршруте при импорте компонента в обоих местах вы импортируете один и тот же файл, т.е. User_Management.vue
2. @Hzk удалите
windows.locaiton.ref
строку, она не нужна, и$router.push
правильно используйте this.$router.push({path:/User_Management_detail/:${row.users_docs[0]._id}
})3. Что это за строка в вашем коде
this.$router.push({path:
/ User_Management/:${row.users_docs[0]._id}})
4. @Nilesh Patel изменил то, что вы посоветовали, спасибо. но все еще не устранена проблема: S
5. @Yash Maheshwari Это для перенаправления на другую страницу при выборе (двойной щелчок) строки данных в таблице