vue上传文件不上传到服务器,我的文件上传不适用于apollo服务器和vuejs

在开发应用程序时,我都使用Apollo将Vue js用作前端框架,将Nodejs用作后端。

我希望能够将文件从Vue应用程序上传到我的Nodejs应用程序,但是当我尝试使用它时,在“网络”标签中出现了此错误

{“错误”:[{”消息”:“无法解构'undefined'或'null'的属性stream。“,”位置“:[{” line“:2,” column“: 3}],“ path”:[“ createCourses”],“ extensions”:{“ code”:“ INTERNAL_SERVER_ERROR”,“ exception”:{“ stacktrace”:[“ TypeError:Can can destruct property stream of' d.Mutation.createCourses.combineResolvers(C:\ Users \ De Stone Of David \ Desktop \ node projects \ vue \ cybersec \ server \ src \ resolvers \ course.js:17:38)“,”在process.internalTickCallback(internal / process / next_tick.js:77:7)“]}}}],”数据“:null}

这是我的Vuejs代码

Course Picture:

Add Courses

const CREATE_COURSE = gql `

mutation CREATECOURSE_MUTATION($Picture: Upload!) {

createCourses(Picture: $Picture) {

id

}

}

`

export default {

name:'helloworld',

data: () => ({

categories: {},

editor: ClassicEditor,

editorData:'',

file:'',

selectedFile:false

}),

methods: {

AddCourse(){

const formData = new FormData()

const Picture = this.file

this.$apollo.mutate({

mutation: CREATE_COURSE,

variables: {

Picture

},

}).then((result) => {

this.success=true;

}).catch((error) => {

this.success=false;

console.log(error)

this.theErorMsg = JSON.parse(JSON.stringify(error.graphQLErrors[0].message)).replace(/['"]+/g, '').replace(/[\[\]']+/g,'').split("child");

})

},

selectFile(){

this.file = this.$refs.file.files[0]

this.selectedFile=true

console.log(this.file)

}

}

}

在我的Nodejs中,这是我的架构代码

import { gql } from 'apollo-server-express';

export default gql`

extend type Mutation {

createCourses(Picture: Upload!): fileMetadata!

}

type fileMetadata {

originalname : String

mimetype : String

encoding : String

destination : String

filename : String

path : String

size : Int

}

;

和我的解析器代码

import { combineResolvers } from 'graphql-resolvers';

import Sequelize from 'sequelize';

import {

isAuthenticated,

} from './authorization';

export default {

Mutation: {

createCourses: combineResolvers(

isAuthenticated,

async (parent, args, { models, me }) => {

console.log('args')

},

),

}

};

以及如何使用Apollo在Nodejs应用程序中处理文件上传,这里是我的server.js代码

import cors from 'cors';

import express from 'express';

import http from 'http';

import uuidv4 from 'uuid/v4';

import { ApolloServer, gql, AuthenticationError } from 'apollo-server-express';

import DataLoader from 'dataloader';

import models, { sequelize } from './models';

import resolvers from './resolvers';

import schema from './schema';

import loaders from './loaders';

const dotenv = require('dotenv');

import {verifyJWT} from './functions/jwt'

dotenv.config();

const app = express();

app.use(cors());

const eraseDatabaseOnSync = true;

// authentication on a server level.

const getMe = async req => {

const token = req.headers['authorization'];

if (token) {

// console.log(verifyJWT(token))

return await verifyJWT(token)

}

};

const server = new ApolloServer({

introspection: true,

typeDefs: schema,

resolvers,

formatError: error => {

const message = error.message

.replace('SequelizeValidationError: ', '')

.replace('Validation error: ', '');

return {

...error,

message,

};

},

context: async({ req, connection }) => {

if (connection) {

return {

models,

loaders: {

user: new DataLoader(keys =>

loaders.user.batchUsers(keys, models),

),

},

};

}

if (req) {

const me = await getMe(req);

return {

models,

me,

secret: process.env.SECRET,

loaders: {

user: new DataLoader(keys => loaders.user.batchUsers(keys, models)),

},

};

}

}

});

server.applyMiddleware({ app, path: '/graphql' });

// what we wrapped our app in to set up the Apollo Server Subscription.

const httpServer = http.createServer(app);

server.installSubscriptionHandlers(httpServer);

const isProduction = !!process.env.DATABASE_URL;

const port = process.env.PORT || 8000;

sequelize.sync({ force: isProduction }).then(async () => {

if (isProduction) {

createUsersWithMessages(new Date());

}

httpServer.listen({ port }, () => {

console.log(`Apollo Server on http://localhost:${port}/graphql`);

});

});

我在网上搜索过,但没有找到任何可以帮助我的信息。如何删除错误消息并处理文件上传?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值