无法运行node.js服务器在节点中使用express和multer上传文件

Cannot run node.js server for upload file in node using express and multer

本文关键字:express multer 文件 node 运行 js 服务器 节点      更新时间:2023-09-26

我只是一个初学者在node.js我会试着用express做一个网站,这样我就可以在那里上传任何东西。我在本地mac上设置了服务器。

它是我写的代码

server.js

var express = require('express');
var app = express();
var fs = require("fs");
var bodyParser = require('body-parser');
var multers  = require('multer');
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(multers({ dest: '/public/'}));
app.get('/index.html', function (req, res) {
   res.sendFile( __dirname + "/" + "index.html" );
})
app.post('/file_upload', function (req, res) {
   console.log(req.files.file.name);
   console.log(req.files.file.path);
   console.log(req.files.file.type);
   var file = __dirname + "/" + req.files.file.name;
   fs.readFile( req.files.file.path, function (err, data) {
      fs.writeFile(file, data, function (err) {
         if( err ){
            console.log( err );
            }else{
               response = {
                  message:'File uploaded successfully',
                  filename:req.files.file.name
               };
            }
         console.log( response );
         res.end( JSON.stringify( response ) );
      });
   });
})
var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port
   console.log("Example app listening at http://%s:%s", host, port)   
})

这些是错误信息

节点upload.js

/用户/dayatura/文件/节点/node_modules/快递/lib/application.js: 209抛出新的TypeError('app.use()需要中间件函数');^

TypeError: app.use()需要中间件函数在EventEmitter。使用(/用户/dayatura/文件/节点/node_modules/快递/lib/application.js: 209:11)在对象。(/用户/dayatura/文档/节点/upload.js: 5)

模块。_compile (module.js: 570:32)

at Object.Module._extensions. js (module.js:579:10)

模块。负载(module.js: 487:32)

at tryModuleLoad (module.js:446:12)

在Function.Module

_load (module.js 438:3):

at Module.runMain (module.js:604:10)

at run (bootstrap_node.js:394:7)

at startup (bootstrap_node.js:149:9)

谁来帮帮我:)

问题如下:

var multer  = require('multer')(({ dest: '/public/'}));

那么你可以这样使用。

app.post('/upload', multer.single('image'), function(req, res,next){
//Handle image content here.
console.log(req.file); //to access file
});

multer的用法如下:

var express = require('express')
var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })
var app = express()
app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
})
app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
  // req.files is array of `photos` files
  // req.body will contain the text fields, if there were any
})

关于如何使用多个方法的文档:https://github.com/expressjs/multer#usage

我刚刚研究了以上链接中的multer示例。

Js

var express = require('express');
var app     = express();
var fs      = require("fs");
var multers = require('multer');
var upload  = multers({ dest: '/public/'});
app.get('/index.html', function (req, res) {
   res.sendFile( __dirname + "/" + "index.html" );
})
app.post('/file_upload', upload.array('avatar'), function (req, res) {
   for (var i = 0, len = req.files.length; i < len; i++) {
      var mainFile = req.files[i];
      var file = __dirname + "/" + mainFile.name;
      fs.readFile( mainFile.path, function (err, data) {
         fs.writeFile(file, data, function (err) {
            if( err ){
               console.log( err );
               }else{
                  response = {
                     message :'File uploaded successfully',
                     filename: mainFile.name
                  };
               }
            console.log( response );
            res.end( JSON.stringify( response ) );
         });
      });
   }
})
var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port
   console.log("Example app listening at http://%s:%s", host, port)   
})

这是使用multer上传文件的完整代码:

var multer  = require('multer')
var storage = multer.diskStorage({
destination: function (req, file, cb) {
    cb(null, './public/app/product') /* here you define destination of uploaded files*/
},
filename: function (req, file, cb) {
    var ext=file.originalname.split(".")
    cb(null, Date.now() +'.'+ext[1]) /* here you set extensions of files when uploaded */
}
})
var upload = multer({ storage: storage });
/* upload.any() method upload any files */
app.post('/backend/product/edit/:id',upload.any(),function (req, res) {

/* req.files are all files that uploaded to server */ 
/* you can see them use res.json(req.files) */ 
})