2016-11-16 66 views
3

我只是node.js的初學者 我會嘗試使用xpress創建一個站點,以便我可以上傳任何內容。 我在我的Mac上本地設置服務器。無法運行node.js服務器在節點上傳文件使用express和multer

它是我writen

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) 
}) 

代碼,這些都是錯誤的消息

node upload.js

/Users/dayatura/Documents/node/node_modules/express/lib/application.js:209 throw new TypeError('app.use() requires middleware functions'); ^

TypeError: app.use() requires middleware functions at EventEmitter.use (/Users/dayatura/Documents/node/node_modules/express/lib/application.js:209:11) at Object. (/Users/dayatura/Documents/node/upload.js:10:5)

at Module._compile (module.js:570:32)

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

at Module.load (module.js:487:32)

at tryModuleLoad (module.js:446:12)

at 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)

任何人的幫助,請:)

+0

multer的用法不正確。請檢查文檔一次https://github.com/expressjs/multer –

回答

2

這些是問題:

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 
}); 
0

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 
}) 

文檔中有關如何使用任何multer方法:https://github.com/expressjs/multer#usage

0

我剛學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) 
}) 
+1

謝謝,我有同樣的詢問。 – 2016-11-16 07:20:32

0

這是完整的代碼使用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) */ 

}) 
相關問題