我对平均堆栈很新,我正在尝试创建一个具有两个数据集合的应用程序,即“用户”和“课程”。对于用户我使用了登录和注册示例,它工作正常。对于课程,我尝试重新创建相同的结构(因此所有命名的文件包括相同的课程都有一个类似的用户),但是在创建新课程并将其添加到数据库时遇到了问题。我得到ERR EMPTY RESPONSE但无法理解为什么以及如何纠正它。下面是一些(压缩)代码,如果需要更多信息,请告诉我。我已经排除了客户端代码,因为我知道错误是在服务器端。使用客户端的以下命令调用Server.js:
function Create(course) {
return $http.post('/api/courses', course).then(handleSuccess, handleError);
}
server.js
require('rootpath')();
var express = require('express');
var app = express();
var session = require('express-session');
var expressJwt = require('express-jwt');
var config = require('config.json');
var bodyParser = require('body-parser');
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(session({ secret: config.secret, resave: false, saveUninitialized: true }));
// use JWT auth to secure the api
app.use('/api', expressJwt({ secret: config.secret }).unless({ path: ['/api/users/authenticate', '/api/users/register'] }));
// routes
app.use('/login', require('./controllers/login.controller'));
app.use('/register', require('./controllers/register.controller'));
app.use('/app', require('./controllers/app.controller'));
app.use('/api/users', require('./controllers/api/users.controller'));
app.use('/api/courses', require('./controllers/api/courses.controller.js'));
//app.use('/registercourse', require('./controllers/create.course.controller'));
// make '/app' default route
app.get('/', function (req, res) {
return res.redirect('/app');
});
var ipaddress = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1";
var port = process.env.OPENSHIFT_NODEJS_PORT || 3000;
// start server
var server = app.listen(port, ipaddress);
控制器/ API / courses.controller
我认为错误不在此文件中,因为它成功调用了CourseService,但我可能错了。
var config = require('config.json');
var express = require('express');
var router = express.Router();
var CourseService = require('services/course.service');
router.post('/', createCourse);
module.exports = router;
function createCourse(req,res){
CourseService.create(req.body)
.then(function(){
res.sendStatus(200);
})
.catch(function(err) {
res.status(400).send(err);
});
}
服务/ course.services 我认为错误在文件中,因为它与services / user.services没有完全相同。在services / user.services中, db.users 变为粗体并连接到db.bind('users'),但这在此文件中不起作用,对于db.courses,它看起来像分贝 .courses。尝试引入一个命名空间,它似乎将db.courses与db.bind('course')连接起来,但我仍然得到同样的错误。
var config = require('config.json');
var _ = require('lodash');
var jwt = require('jsonwebtoken');
var bcrypt = require('bcryptjs');
var Q = require('q');
var mongo = require('mongoskin');
var connectionString = "mongodb://localhost:27017/mean-stack-registration-login-example";
if(process.env.OPENSHIFT_MONGODB_DB_URL){
connectionString = process.env.OPENSHIFT_MONGODB_DB_URL + "studycontrol";
}
var db = mongo.db(connectionString, { native_parser: true });
db.bind('courses');
var service = {};
service.create = create;
module.exports = service;
module.exports = service;
function create(courseParam) {
var deferred = Q.defer();
//validation
db.courses.findOne(
{courseName: courseParam.courseName}),
function (err, course) {
if (err) deferred.reject(err);
if (course) {
deferred.reject('Coursename "' + courseParam.courseName + '" is already taken');
} else {
createCourse()
}
};
function createCourse() {
var course = courseParam
db.courses.insert(
course,
function (err, doc) {
if (err) deferred.reject(err);
deferred.resolve();
});
}
return deferred.promise;
}