我有一个非常简单的后端与几个路线。我希望将路由逻辑放在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();
};但是当我向/sendMail发出POST请求时,它会给我一个404
enter image description here
发布于 2016-01-30 18:55:54
在sendMail.js中删除文件末尾:
next();因为在此路由中,您的响应在异步回调中,并且在它们被调用之前,node.js将获取next(),因此它将移动到下一个路由器。因为没有更准确的路由,所以它返回404。
Server.js中的一个离题之处:将您的日志请求移到sendMail路由器之前。
https://stackoverflow.com/questions/35100412
复制相似问题