我正在开发一个Node,Express,Mongodb,React/Redux应用程序,它使用http-proxy创建一个代理服务器,然后连接到包含服务器逻辑的API。
当尝试通过应用程序服务器代理连接到API服务器时,我收到以下错误:


我的Mongodb服务器与webpack一起运行,但当尝试启动Node Api服务器时,它将立即关闭,尽管它之前一直运行良好,直到我添加了会话代码。我的直觉是,这实际上可能是Windows的问题(我的生活故事)。你可以在下面找到我的代理和api代码。
我的节点代理:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
//PROXY BELOW
var httpProxy = require('http-proxy')
var app = express();
//PROXY TO API
const apiProxy = httpProxy.createProxyServer({
target:'http://localhost:3001'
});
app.use('/api', function(req,res){
apiProxy.web(req,res);
})
//END PROXY
// view engine setup
// app.set('views', path.join(__dirname, 'views'));
// app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
// app.use(bodyParser.json());
// app.use(bodyParser.urlencoded({ extended: false }));
// app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.get('*', function(req,res){
res.sendFile(path.resolve(__dirname,'public','index.html'))
})
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;我的Node API服务器:
var express = require('express');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var logger = require('morgan');
const session = require('express-session')
const MongoStore = require('connect-mongo')(session)
var app = express();
// view engine setup
// app.set('views', path.join(__dirname, 'views'));
// app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
//APIS
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/bookshop');
var db = mongoose.connect('mongodb://localhost:27017/bookshop');
db.on('error',console.error.bind(console,'#MongoDB - connection error'))
//SET UP SESSIONS must be after mongodb connection
app.use(session({
secret:'mySecretString',
saveUninitialized:false,//record session only if user adds product to cart
resave:false,//session wont be resaved if didnt change
cookie:{maxAge: 1000 * 60 * 60 * 24 * 2},//two days in milliseconds
store: new MongoStore({mongooseConnection: db,ttl:2 * 24 * 60 * 60})//time to leave 2 days 24 hours 60 minutes 60 seconds
}))
//SAVE SESSION CART API
app.post('/cart',function(req,res){
var cart = req.body
req.session.cart = cart
req.session.save(function(err){
if(err){
throw err
}
res.json(req.session.cart)
})
})
//GET SESSION CART API
app.get('/cart', function(req,res){
if(typeof req.session.cart !==undefined){
res.json(req.session.cart)
}
})
//END SESSIONS
var Books = require('./models/books.js')
///POST BOOKS API
app.post('/books',function(req,res){
var book = req.body;
Books.create(book,function(err,books){
if(err){
throw err
}
res.json(books)
})
});
//GET BOOKS
app.get('/books',function(req,res){
Books.find(function(err,books){
if(err){
throw err
}
res.json(books)
})
})
//DELETE BOOKS
app.delete('/books/:_id',function(req,res){
var query = {_id:req.params._id};
Books.remove(query,function(err,books){
if (err){
throw err
}
res.json(books)
})
})
//UpdateBooks(Not used in app) - uses put request
//check EB
//END APIS
app.listen(3001,function(err){
if(err){
return console.log('API SERVER ERROR', err)
}
console.log('API Server is listening on http://localhost:3001')
})发布于 2017-07-17 10:34:16
这是我愚蠢的假设。与Windows无关:
问题是这一行:
var db = mongoose.connect('mongodb://localhost:27017/bookshop');应该是这样的:
var db = mongoose.connection;
https://stackoverflow.com/questions/45133270
复制相似问题