为什么没有Node.js Express与MongoDB响应提取API调用(ReactJS和Redux)?
使用ReactJS,Redux,Webpack,Node.js和Express与MongoDB,我正在按照教程https://github.com/vasansr/mern-es6,并试图将其整合到我的项目。 首先,我正在尝试向我创build的服务器发出POST请求。 它会得到一个成功的响应,并且不会logging错误。 然而,在服务器的POST API内,它不loggingconsole.log('Req body', req.body);
,在terminal,我检查数据库是否已经用mongo -> show dbs
创buildmongo -> show dbs
数据库,但它是空的。
难道是有东西在拦截来自服务器的请求吗? 可能是什么问题?
这个…
app.use('/', function (req, res) { res.sendFile(path.resolve('client/index.html')); });
来之前:
app.post('/api/users/', function(req, res) { //... });
由于它是app.use
POST /api/users
仍然会击中该中间件,并且res.sendFile
结束请求/响应。 您可能会看到您的post正在取回客户端HTML。
尝试将您的客户端HTML端点移动到中间件的末尾 ,并在error handling程序之前(如果有)。 这样,只有在没有任何API端点匹配的情况下才能使用。 或者,如果您只想GET /
返回HTML,请更改use
以get
:
app.use(webpackDevMiddleware(compiler, {noInfo: true, publicPath: config.output.publicPath})); app.use(webpackHotMiddleware(compiler)); app.use(express.static('dist')); //where bundle.js is app.use(bodyParser.json()); app.post('/api/users/', function(req, res) { console.log('Req body', req.body); var newUser = req.body; db.collection('users').insertOne(newUser, function(err, result) { if(err) console.log(err); var newId = result.insertedId; db.collection('users').find({_id: newId}).next(function(err, doc) { if(err) console.log(err); res.json(doc); }); }); }); app.get('/', function (req, res) { res.sendFile(path.resolve('client/index.html')); });
app.post('/api/users/', function(req, res) { console.log('Req body', req.body); var newUser = req.body; db.collection('users').insertOne(newUser, function(err, result) { if(err) console.log(err); var newId = result.insertedId; db.collection('users').find({_id: newId}).next(function(err, doc) { if(err) console.log(err); res.json(doc); }); }); });
我有一个关于这个代码的小小的评论, if(err) console.log(err);
我想你应该改为if(err) return console.log(err);
。
对于error
情况,我认为你需要return
,否则下面的部分将被执行,并会有一些错误报告。