Mr.*_*yyy 4 mongodb vue.js nuxt.js
我正在尝试使用 MongoDB 进行 Vuex 不适合的长期复杂存储。
我已经安装并运行了 MongoDB,并且安装了 mongoose 包。
在我的插件文件夹中,我创建了一个脚本来初始化模块并将其导出:
插件/mongoose.js
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/users', { useNewUrlParser: true });
export default({ app }, inject) => {
inject('mongoose', mongoose);
}
Run Code Online (Sandbox Code Playgroud)
然后在我的 nuxt.config.js 中,我声明该模块并将其设置为仅服务器端。
nuxt.config.js
...
plugins: [
{ src: '~/plugins/mongoose.js', mode: 'server' },
],
...
Run Code Online (Sandbox Code Playgroud)
最后,在我的一个页面中,我尝试通过一种方法访问它。
页面/users.vue
<template>
<button @click="addUser('joe')">Joe</button>
</template>
<script>
export default {
methods: {
addUser(name) {
console.log(this.$mongoose);
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
当我单击控制台中的按钮时,我得到cannot stringify a function change了cannot stringify a function name。我无法判断这是否有效,但我无法使用该mongoose对象的任何属性。
尽管这个主题看起来相当常见,但似乎没有太多结构化信息。
您可以创建自己的 serverMiddleware,然后在 asyncData 中调用它。简单来说,我有以下内容:
// nuxt.config.js
const bodyParser = require('body-parser')
export default {
...,
serverMiddleware: [
bodyParser.json(),
{ path: '/db-api', handler: '~/api/db-connection' },
],
}
Run Code Online (Sandbox Code Playgroud)
在 db-connection 中你可以添加类似的内容:
import {
getOneDocument,
} from '../utils/db-helper'
export default async function (req, res, next) {
const doc = await getOneDocument('my-one-and-only-collection', req.body)
res.end(JSON.stringify(doc))
}
Run Code Online (Sandbox Code Playgroud)
然后在 asyncData 中你可以执行如下操作:
async asyncData (context: any) {
const reqq = await axios.post(
`${url}/db-api`,
{
'sys.id': '2J2a1nQhmTYbHML2si8gmW'
}
)
return {
thatOneAndOnlyRecord: reqq.data,
}
}
Run Code Online (Sandbox Code Playgroud)
您需要确保任何复杂的查询也发生在您的中间件内部,因为您要为每个查询发出网络请求到 mongo。
| 归档时间: |
|
| 查看次数: |
11469 次 |
| 最近记录: |