【问题标题】:How to upload a file in Node.js ? Error: Cannot POST /upload如何在 Node.js 中上传文件?错误:无法发布/上传
【发布时间】:2016-10-13 12:20:40
【问题描述】:

问题:

我在 upload.ejs 中单击提交,但出现错误:“无法 POST /upload”


解决方案:

我的问题是架构问题,而不是编码问题。

我改变了我的项目结构来解决这个问题。

我创建了一个名为“upload.js”的新文件来放入路由器代码。

我还将“upload.ejs”移动到项目的根目录。

我更新了我的“app.js”以考虑新的路由器文件“upload.js”。

我将表单更改为使用“upload.js”。


代码:

上传.js

var express = require("express");
var router = express.Router();
var flash = require("connect-flash");

var firebase = require("firebase");

var multer = require("multer");
var upload = multer({dest:"./public/images/uploads/"});

router.get("/", function(req, res, next){
    res.render("upload");
});

router.post("/", upload.single("image"), function(req, res, next){

    if (req.file){
        console.log("Uploading file...");
        var image = req.file.filename;
    }
    else {
        console.log("No file uploaded");
        var image = "noimage.jpg";
    }

    var post = {
        title: req.body.title,
        section: req.body.section,
        image: image,
    }

    var section = req.body.section.toLowerCase();

    firebase.database().ref("posts/"+section).push(post);

    req.flash("success_msg", "Post Created");
    res.redirect("/upload");


});

module.exports = router;

上传.ejs

<form enctype="multipart/form-data" method="post" action="upload">

【问题讨论】:

  • 你不应该根据你的路线在 /users/upload 发帖吗?
  • @AbhyuditJain 我试过了,没用。我得到:无法发布 /users/upload
  • 您为什么要从您的问题中删除所有代码?这使得该问题作为其他人的参考毫无价值,因为问题中没有足够的信息甚至无法知道所问的内容。我想这个问题现在应该被删除。或者,您可以将相关代码放回问题中,以便对其他人保留一些有用性。此外,如果您找到自己问题的答案,则发布您自己的答案 - 您不会将其放入问题中。问题是为了问题,答案是为了答案(与其他一些网站不同)。
  • @jfriend00 我联系了版主删除问题。
  • @jfriend00 谢谢你提醒我:)

标签: javascript node.js routes ejs


【解决方案1】:

您正在发布到/upload url,但您注册的路线是 POST /users/upload。可能您必须将以下功能移动到 routes/index.js 文件中:

router.post("/upload", upload.single("image"), function(req, res, next){

    if (req.file){
        console.log("Uploading file...");
        var image = req.file.filename;
    }
    else {
        console.log("No file uploaded");
        var image = "noimage.jpg";
    }

    var post = {
        title: req.body.title,
        section: req.body.section,
        image: image,
    }

    var postRef = fbRef.child("posts");

    postRef.push().set(post);

    req.flash("success_msg", "Post Created")
    res.redirect("/"+ req.body.section.toLowerCase());

});

【讨论】:

  • 试过了。没有成功:(
  • 我最终重新考虑了我的项目架构并创建了一个名为“upload.js”的新文件来放置路由器代码。我还将“upload.ejs”移动到项目的根目录.我更新了我的“app.js”以考虑新的路由器文件“upload.js”。不过,您的回答使我朝着正确的方向前进。谢谢!
【解决方案2】:

你需要使用multer模块:

server.js

multer = require('multer');
app.use(multer({
        dest: './public/uploads/',
        rename: function (fieldname, filename) {
            return filename.replace(/\W+/g, '-').toLowerCase();
        }
}));

上传.js

router.post("/upload",function(req, res, next){
    console.log(req.file);
});

【讨论】:

  • 你能把你的代码贴在这里吗?我认为您的代码有问题
  • 我认为有一个误解 :) 我已经在使用 multer。不过感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 2011-07-09
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多