2017-09-15 8 views
0

クイルエディタでアップロードイメージを開発している間、私は投稿要求にこだわっています。 私はこの問題を解決するために何をしなければならないのか分かりません。 投稿要求を使用してデータを送信しようとすると、404エラーが発生します。node.jsを使ってPOST 404エラーを修正するには?

enter image description here

ルート/ img.js - UPDATED

var ImageFile = require('../models/imageFiles'); 

var multer = require('multer'); 
var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, 'img/') // Set directory 
    }, 
    filename: function (req, file, cb) { 
     cb(null, file.name) // Set file name 
    } 
}); 

var img = multer({ storage: storage }); 

router.post('/upload', img.single('imgfile'), (req, res, next) => { 
    var imageFile = new ImageFile({ 
     name: req.body.name, 
     type: req.body.type, 
     size: req.body.size, 
     content: req.body.content 
    }); 

    imageFile.save((err, result) => { 
     if (err) { 
      return res.status(500).json({ 
       title: 'An error occured', 
       error: err 
      }); 
     } 
     res.status(201).json({ 
      message: 'User created', 
      obj: result 
     }); 
    }); 
}); 

module.exports = router; 

app.js

const express = require('express'); 
var bodyParser = require('body-parser'); 
const port = process.env.PORT || 3000; 

var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 

var appRoutes = require('./routes/app'); 
var userRoutes = require('./routes/user'); 
var imgRoutes = require('./routes/img'); 
var app = express(); 

// Start 
app.use(express.static(path.join(__dirname, '../awesome-drill/dist'))); 

app.use(logger('dev')); 
app.use(bodyParser.json({ limit: '10mb' })); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use((req, res, next) => { 
    res.setHeader('Access-Control-Allow-Origin', '*'); 
    res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-Width, Content-Type, Accept'); 
    res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PATCH, DELETE, OPTIONS'); 
    next(); 
}); 

app.use('/user', userRoutes); 
app.use('/img', imgRoutes); 
app.use('/', appRoutes); 
app.use(express.static('routes')); 

// It's for routing SPA 
app.get('*', (req, res) => { 
    res.sendFile(path.join(__dirname, '../awesome-drill/dist/index.html')); 
}); 

app.listen(port,() => { 
    console.log(`Server is up on port ${port}`); 
}); 

前面サービス(angular4)

import { Injectable } from '@angular/core'; 
import {Http, Headers, Response} from '@angular/http'; 

@Injectable() 
export class FileService { 
    public userId = localStorage.getItem('userId'); 

    constructor(private http: Http) { } 

    imgUpload(obj) { 
    const body = JSON.stringify(obj); 
    const headers = new Headers({ 
     'Content-Type': 'application/json' 
    }); 

    return this.http.post('img/upload', body, { 
     headers: headers 
    }) 
     .map((response: Response) => response.json()); 
    } 
} 

あなたのおかげで、私は私のミスを発見し、私はそれを追加しました。ただし、404エラーが発生します。

これは私のフォルダ構造です。 enter image description here

+1

ルートに実際に投稿されているフロントエンドコードを含めるには、回答を更新してください。 404は意味がないので、問題とは関係ないので、マングースモデルのコードを削除することもできます。 – Soviut

+0

これは、間違ったURIにデータを送信しているか、バックエンドで定義したと思われるURIが実際に存在しないことを意味します。 404は「見つからない」ことを意味し、あなたのコードが「見つからない結果」に対して明示的にエラーを出力していないので、唯一の別の場所はURLが正しくないためです。 –

+0

あなたのapp.jsには404のミドルウェア私が最初に追加したexpress.jsの設定を覚えています。それは少なくともあなたのコントローラに当たっていますか?またはこれを投げているかもしれない別の 'ミドルウェア'関数を持っていますか? –

答えて

0

ルーターをエクスポートしていません。 routes/img.jsファイルの末尾に以下を追加してください。

module.exports = router; 

あなたは今それを持っている方法は、デフォルトのエクスポートはありませんので、あなたは、あなたが何をインポートしていないしているrequire('./routes/img')とき。 console.log(imgRoutes)app.jsに入れた場合、おそらくundefinedが返されます。

+0

私はこの問題を解決できたと思ったそれでも404エラーが発生します... –

+0

あなたのルートが存在しない別の理由があります。あなたのモジュールが正しくインポートされているかどうかを確認するために 'console.log()'の束を設定するか、 'debugger;を使ってコードの各部分を調べてください。https://nodejs.org/api/debugger.html – Soviut

関連する問題