#json #node.js #express
#json #node.js #экспресс
Вопрос:
Переместил маршруты в их собственную папку, теперь я не могу проанализировать тело ответа. Контроллер отправляет тело правильно. Приложение работало корректно, когда маршруты были в файле js сервера.
Server.js ДО ТОГО, КАК
var express = require('express');
var app = express();
var routes = require('./routes/routes.js');
app.use('/',routes);
app.use(express.static(__dirname '/public'));
app.use('/bootstrap', express.static(__dirname '/public/bower_components/bootstrap/dist'));
app.use('/jquery', express.static(__dirname '/public/bower_components/jquery/dist'));
app.use('/angular', express.static(__dirname '/public/bower_components/angular'));
app.use('/controllers', express.static(__dirname '/public/controllers'));
Routes.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var ObjectId = require('mongojs').ObjectID;
var mongojs = require('mongojs');
var db = mongojs('contactlist',['contactlist'])
var router = express.Router();
app.use(bodyParser.json());
router.put('/contactlist/:id',function(req,res){
console.log("req.body.name");//gives undefined
db.contactlist.findAndModify({
query:{_id: ObjectId(req.params.id)},
update:{ $set:{name:req.body.name,email:req.body.email,number:req.body.number}},
new: true},
function(err,doc){
res.json(doc);
});
});
module.exports = router;
Кроме того, есть мысли о том, почему я должен добавлять маршруты.js здесь вместо просто / routes ?
var routes = require('./routes/routes.js');
Структура папок
-App
node_mods/
public/
index.html
controllers/
resources/
routes/
routes.js
Server.js ПОСЛЕ
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
var routes = require('./routes/routes.js');
app.use('/',routes);
app.use(express.static(__dirname '/public')); //look for static files js html css etc
app.use('/bootstrap', express.static(__dirname '/public/bower_components/bootstrap/dist'));
app.use('/jquery', express.static(__dirname '/public/bower_components/jquery/dist'));
app.use('/angular', express.static(__dirname '/public/bower_components/angular'));
app.use('/controllers', express.static(__dirname '/public/controllers'));
app.listen(3000);
console.log('server running on port 3000');
Ответ №1:
Что касается вашего (второго?) вопрос об импорте, требующем routes.js:
Когда вы делаете
var routes = require('./routes/routes.js');
вы не вызываете маршруты. На самом деле вам требуется модуль. Это касается не только данных маршрутов, но и поведения объекта маршрутизатора, включая связанное промежуточное программное обеспечение для некоторых из всех маршрутов.
Если вы внимательно посмотрите, ваш router.js экспортирует «объект» маршрутизатора (или функцию, называйте его как хотите). Поэтому, когда вам это требуется, вы получаете весь пакет, а не только данные
Ответ №2:
Ваше тело анализируется после вызова вашего маршрута.
Передайте свой body-parser
код в файл вашего основного сервера, как правило, он находится server.js
перед всеми маршрутами.
Вот так:
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
Комментарии:
1. Я пробую это в server.js файл, который вы запрашиваете, и все равно получаете ту же ошибку.
2. та же ошибка, что и раньше, не удается прочитать свойство ‘name’ неопределенного.
3. можете ли вы показать мне свой server.js файл с обновленным кодом?
4. Я добавил его в основной пост
5. вы отправляете данные формы?