Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS带着三个点崩溃了_Node.js_Mongodb_Express_Handlebars.js_Express Handlebars - Fatal编程技术网

Node.js NodeJS带着三个点崩溃了

Node.js NodeJS带着三个点崩溃了,node.js,mongodb,express,handlebars.js,express-handlebars,Node.js,Mongodb,Express,Handlebars.js,Express Handlebars,我的nodejs项目有一个非常奇怪的问题。该项目是一个在线商店与快车和车把,它有一个mongo数据库连接。在路由器部分,我有以下代码: router.get('/item/:item', function (req, res, next) { var actItem = {}; Item.find().findOne({ '_id': req.params.item }, function (err, item) { actItem.name = item.item_name;

我的nodejs项目有一个非常奇怪的问题。该项目是一个在线商店与快车和车把,它有一个mongo数据库连接。在路由器部分,我有以下代码:

router.get('/item/:item', function (req, res, next) {
var actItem = {};
Item.find().findOne({ '_id': req.params.item }, function (err, item) {
    actItem.name = item.item_name;
    actItem.price = item.price;
    actItem.description = item.description;
    actItem.imageLink = item.imageLink;

});
res.render('pages/shop/item-view', { title: 'Express', item: actItem });
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
    <div class="carousel-item active">
        <img class="d-block w-100" src="{{item.imageLink}}" alt="First slide">
    </div>
    <div class="carousel-item">
        <img class="d-block w-100" src="" alt="Second slide">
    </div>
    <div class="carousel-item">
        <img class="d-block w-100" src="" alt="Third slide">
    </div>
</div>
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
</a>
}))

它在数据库的URL中查找项目ID,并返回传递要显示的数据的视图。它工作正常,但在视图中,我有以下代码:

router.get('/item/:item', function (req, res, next) {
var actItem = {};
Item.find().findOne({ '_id': req.params.item }, function (err, item) {
    actItem.name = item.item_name;
    actItem.price = item.price;
    actItem.description = item.description;
    actItem.imageLink = item.imageLink;

});
res.render('pages/shop/item-view', { title: 'Express', item: actItem });
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
    <div class="carousel-item active">
        <img class="d-block w-100" src="{{item.imageLink}}" alt="First slide">
    </div>
    <div class="carousel-item">
        <img class="d-block w-100" src="" alt="Second slide">
    </div>
    <div class="carousel-item">
        <img class="d-block w-100" src="" alt="Third slide">
    </div>
</div>
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
</a>
你知道如何解决这个问题以及为什么会发生吗

解决方案 我通过在做任何事情之前检查项目,设法解决了这个问题

if (item) {
  actItem.name = item.item_name;
  actItem.price = item.price;
  actItem.description = item.description;
  actItem.imageLink = item.imageLink;
}

这是因为当我使用。。。浏览器发出请求/项目/。。。要获取图像,则req.params.item的值变为。。。在数据库中没有_id=。因此,项值应该是未定义的

findOne
是一个异步函数,因此在其内部调用
res.render
,并检查项是否为空:

router.get('/item/:item', function (req, res, next) {
var actItem = {};

    Item.find().findOne({ '_id': req.params.item }, function (err, item) {
        if(item){
            actItem.name = item.item_name;
            actItem.price = item.price;
            actItem.description = item.description;
            actItem.imageLink = item.imageLink;
            res.render('pages/shop/item-view', { title: 'Express', item: actItem 
         }
         else{
            res.render('pages/shop/item-view', { title: 'Express', item: 'defaultValue'});
         }

    });
 });

findOne
是一个异步函数,因此在其内部调用
res.render
,并检查项是否为空:

router.get('/item/:item', function (req, res, next) {
var actItem = {};

    Item.find().findOne({ '_id': req.params.item }, function (err, item) {
        if(item){
            actItem.name = item.item_name;
            actItem.price = item.price;
            actItem.description = item.description;
            actItem.imageLink = item.imageLink;
            res.render('pages/shop/item-view', { title: 'Express', item: actItem 
         }
         else{
            res.render('pages/shop/item-view', { title: 'Express', item: 'defaultValue'});
         }

    });
 });

是的,我几分钟前就提出了同样的解决方案,效果很好,但我真的不明白html中的三个点怎么会使我的整个服务器崩溃。有什么想法吗?当您使用
..
时,浏览器会发出此请求
/item/..
以获取图像,然后
req.params.item
的值变为
..
,并且在数据库中没有
\u id
=
..
的条目。因此,
值很可能是未定义的,现在就清楚了!非常感谢。是的,我几分钟前就提出了同样的解决方案,效果很好,但我真的不明白html中的三个点怎么会使我的整个服务器崩溃。有什么想法吗?当您使用
..
时,浏览器会发出此请求
/item/..
以获取图像,然后
req.params.item
的值变为
..
,并且在数据库中没有
\u id
=
..
的条目。因此,
值很可能是未定义的,现在就清楚了!非常感谢。