我正在尝试将我的 Nuxt 项目与 nuxt-mongoose 模块集成。 (https://nuxt-mongoose.nuxt.space/getting-started/setup)
但是即使我已按照所有步骤操作,我还是遇到了问题。
首先我安装了软件包
npm install nuxt-mongoose -D
然后我设置了 .env 和 nuxt.config.ts
// nuxt.config.ts
export default defineNuxtConfig({
devtools: { enabled: true },
css: [
'vuetify/styles/main.sass'
],
build: {
transpile: ['vuetify']
},
modules: [
'nuxt-mongoose',
],
nitro: {
},
mongoose: {
uri: process.env.MONGODB_URI,
options: {},
modelsDir: 'models'
}
})
所以我按照 wiki 的模式创建了一个架构
// server/models/user.schema.js
import {defineMongooseModel} from "#nuxt/mongoose"; //Here is where I'm getting the error
export const UserSchema = defineMongooseModel({
name: 'UserSchema',
schema: {
name: {
type: 'string',
required: true,
},
email: {
type: 'string',
required: true,
unique: true
},
password: {
type: 'string',
required: true
}
}
});
即使我按照 wiki 中的内容操作,运行
npm run dev
时,我也会收到此错误:
ERROR Failed to resolve
import "#nuxt/mongoose" from "server\models\user.schema.js".
Does the file exist?
我已经检查过,实际上模块导出存在,所以使用的方法,所以我不知道为什么它不起作用。
我尝试删除其他互联网页面中看到的
import {defineMongooseModel} from "#nuxt/mongoose"
,但随后错误表明它找不到该方法。
我多次尝试删除并安装该软件包
nuxt-mongoose
,但没有成功。
检查您发送的链接后,您的架构配置正常。问题是,
~/pages/index.vue
里面的代码。如果我没记错的话,服务器中的文件只能在服务器文件夹内访问,API 路由除外。
页面
index.vue
里面的代码,替换成这个。
<template>
<div>
<v-btn @click="saveTestUser()">Prova prova</v-btn>
</div>
</template>
<script setup lang="ts">
async function saveTestUser() {
console.log('clicked')
$fetch('/api/users/create', {
method: 'POST',
body: {
name: 'Giggio',
email: '[email protected]',
password: 'snmpassword'
}
}).then(() => {
console.log('Success')
}).catch((err) => {
console.log(err)
})
}
</script>
~/server/api/create.post.js
export default defineEventHandler( async ( event ) => {
try {
const body = await readBody( event )
await UserSchema.create( body )
return 200
} catch ( error ) {
console.log( error )
return createError( { statusCode: 500, statusMessage: 'Something went wrong.' } )
}
} )
已测试,有效!