我对nodejs路由器有一些疑问,这是我的代码:
server.js
var express = require('express');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var config = require('./config');
var mongoose = require('mongoose');
var app = express();
mongoose.connect(config.database, function (err){
// body...
if(err){
console.log(err);
}else{
console.log('database ok')
}
});
app.use(bodyParser.urlencoded({ extend: true }));
app.use(bodyParser.json());
app.use(morgan('dev'));
//call api
var api = require('./app/routes/api')(app, express);
api.use('/api', api);
app.get('/',function(req,res){
res.sendFile(__dirname + '/public/views/index.html')
});
app.listen(config.port, function (err) {
// body...
if (err) {
console.log(err);
}else{
console.log('listen in port ' + config.port)
}
})
api.js
var User = require('../models/user');
var config = require('../../config');
var secretKey = config.secretKey;
module.exports = function(app, express) {
var api = express.Router();
api.post('/daftar', function (req, res) {
var user = new User({
name: req.body.name,
username: req.body.username,
password: req.body.password
});
user.save(function (err) {
if(err){
res.send(err);
return;
}
res.json({ message: 'user telah dibuat'});
});
});
return api;
}
当我尝试使用/ api / daftar url发布内容时,我的问题无法找到,但是当我尝试将api.post()
移动到我的server.js时,它可以工作。我刚刚将api.post()
更改为app.post()
你能告诉我我做错了吗?
答案 0 :(得分:2)
可能的解决方案1
将api.use('/api', api)
更改为app.use('/api', api)
如果这不起作用,我已经包含了我在下面的方式
可能的解决方案2
从外观上看,你使用的是快递4.x.试一试。
server.js
var express = require('express');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var config = require('./config');
var mongoose = require('mongoose');
var app = express();
...
var api = require('./app/routes/api')(app); // Don't need to pass express here
app.use('/api', api); // Note the app.use instead of api.use
...
api.js
var User = require('../models/user');
var config = require('../../config');
var secretKey = config.secretKey;
module.exports = function(app) {
// Removed express and changed to app.post
app.post('/daftar', function (req, res) {
var user = new User({
name: req.body.name,
username: req.body.username,
password: req.body.password
});
user.save(function (err) {
if (err) {
console.log(err);
// Set an error status code here
res.status(400).send(err);
}
// I prefer this syntax. More verbose and you can set the HTTP status code
// Could put in directly, but I abstracted the msg to a variable here.
var msg = { message: 'user telah dibuat' };
// 201 means Created
res.status(201).send(msg);
});
});
// Do not need to return anything
}
我很难对此进行测试,但如果您遇到其他一些问题,请在console.log()
块中添加一些app.post
来电,以确保其被调用。