javascript - multer上传不工作

标签 javascript node.js express multer

我正在尝试通过 multer 使用文件上传功能。 我总是收到 404 错误,我该如何解决这个问题?

This is my app.js :

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

var session = require('express-session');
var flash = require('connect-flash');
var mongoose = require('mongoose');

var multer = require('multer');

app.use(multer({
  dest: './uploads/'
}).single('singleInputFileName'));

This is my router.js :

router.post('/', function(req, res) {
   console.dir(req.files);
});

And this is the form :

form(action='/' enctype='multipart/form-data')
 input(type='file' name='singleInputFileName')
 input(type='submit' value='Upload photo')

编辑:我已将此脚本添加到 app.js

app.post('/fileuploads', function(req, res) {
  upload(req, res, function(err) {
    console.log(req.body);
    console.log(req.files);
    if (err) {
      return res.end("Error uploading file.");
      console.log(err);
    }
    res.end("File is uploaded");
  });
});

最佳答案

这是 multer 文件上传的工作片段,我已经使用以下代码在 postman 上进行了测试,请检查它并进行相应的更改。

app.js

// NodeJS Core dependencies
var express = require('express');
var app = express();
var router = express.Router();
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var createError = require('http-errors');
var session = require('express-session');
var flash = require('connect-flash');
var mongoose = require('mongoose');
// Router file in which routes implemented
var index = require("./routes/index")(app, router);
// Add routers in middleware
app.use("/", index);
// Listen application on 3000 Port
app.listen(3000, function () {
    console.log("application running on port 3000");
});

index.js

// NodeJS module dependencies
var multer = require('multer');
var storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, `${process.cwd()}/uploads/`)
    },
    filename: (req, file, cb) => {
        cb(null, file.fieldname + '-' + Date.now() + '.' + file.originalname.split('.')[file.originalname.split('.').length - 1].toLowerCase())
    }
});
var upload = multer({ storage: storage });
// Export routes
module.exports = function (app, router) {
    router.post('/fileupload', upload.single('avatar'), (req, res, next) => {
        res.status(200).json({message: `File uploaded successfully on '${process.cwd()}/uploads/${req.file.filename}`});
    });
    return router;
}

Package.json

{
  "name": "nodejs-multer",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon app.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "connect-flash": "0.1.1",
    "cookie-parser": "1.4.3",
    "express": "4.16.3",
    "express-session": "1.15.6",
    "mongoose": "5.0.14",
    "moongoose": "0.0.5",
    "morgan": "1.9.0",
    "multer": "1.3.0",
    "nodemon": "1.17.3"
  }
}

关于javascript - multer上传不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49812545/

相关文章:

node.js - 对除一个 Controller 之外的所有 Controller 使用快速中间件功能

javascript - Node/Express Rest API - 如何从 mssql 抛出错误

javascript - 更好的 jsx 条件来订购组件

javascript - 在javascript中将字符串数组转换为数字数组

node.js - Mongoose 将 strict 设置为 false 会禁用验证

javascript - $not不执行$and操作

mysql - Nodejs/Express 从 Web 客户端保存选择的头像并直接保存到 MySQL 数据库

node.js - 在 Express REST Api 中实现角色和权限的最佳方法是什么

javascript - 谷歌地图 api json ajax -- 标记未显示

javascript - Angular Google Maps map 点击事件工作一次