app.use不工作expression4

我有一个非常简单的后端与一对夫妇的路线。 我想保持server.js文件之外的路由逻辑,但由于某种原因,当我做了一个POST请求的路由,它给了我一个404。

server.js

// Call packages var express = require('express'); var bodyParser = require('body-parser'); var app = express(); var morgan = require('morgan'); var config = require('./config.js'); var mongoose = require('mongoose'); var path = require('path'); var mandrill = require('mandrill-api/mandrill'); var mandrill_client = new mandrill.Mandrill(config.mandrillApi); var favicon = require('serve-favicon'); // Set up morgan to log HTTP requests app.use(morgan('dev')); // Set up mongo database mongoose.connect(config.database); // Parse body app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); // Server favicon app.use(favicon(path.resolve('../client/content/images/logos/website-brand.png'))); //Routes app.use('/sendMail', require(__dirname + '/routes/sendMail.js')); // Default Routes app.get('/', function (req, res) { res.sendfile(path.resolve('../client/views/index.html')); }); app.get('/:name', function (req, res) { res.sendfile(path.resolve('../client/views/index.html')); }); //Serve static files app.use(express.static(path.resolve('../client'))); app.use('/scripts', express.static(path.resolve('../node_modules/angular-ui-bootstrap'))); app.use('/scripts', express.static(path.resolve('../node_modules/requirejs'))); //Log requests app.use(function (req, res, next) { console.log(req.method, req.url); next(); }); //Start server app.listen(config.port, function() { console.log('I\'m listening on port ' + config.port); }); 

和sendMail.js

 var config = require('../config.js'); var express = require('express'); var router = express.Router(); var mandrill = require('mandrill-api/mandrill'); var mandrill_client = new mandrill.Mandrill(config.mandrillApi); // Routes router.post(sendMail); module.exports = router; function sendMail(req, res, next) { console.log("Receiving in sendMail"); var name = req.body.name; var email = req.body.email; var message = req.body.message; var toSend = { "html": "<p>"+message+"</p>", "text": message, "subject": "From Website", "from_email": email, "from_name": name, "to": [{ "email": "", "name": "", "type": "to" }] }; mandrill_client.messages.send({"message": toSend}, function(result) { console.log(result); var status = result[0].status; if (status == 'sent') { res.send({success: true}); } else { res.send({success: false, reason: status}); }; }, function(e) { console.log("Mandrill Error: "+e.message); res.send({success: false, error: e}); }); next(); }; 

但是当我做一个POST请求到/ sendMail它给了我一个404

在这里input图像说明

在sendMail.js文件末尾删除:

 next(); 

因为在这个路由中你的响应是在asynchronouscallback中,并且在它们被调用之前,node.js得到next() ,因此它移动到下一个路由器。 因为没有更准确的路线,它会返回404。

一个在server.js中的offtopic:在sendMail路由器之前移动你的日志请求。