猫鼬无法使用hapi.js(简单设置)

时间:2019-04-02 14:41:42

标签: node.js mongodb mongoose hapi

我正在尝试hapi.js,并希望将hapi与猫鼬连接。 但是每当我去这条路线时,它都会说Internal Server Error

快速设置:

我的文件结构是这样的:(我没有包含与此问题无关的东西)

/app.js
/node_modules
/models
    /Product.js
/routes
    /product-page
         /product.js
/views
    /product
         /product.html

在我的app.js里面是这个。

const Hapi = require('hapi');

const routes = require('./routes');
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/hapidb', { useNewUrlParser: true })
    .then(() => console.log('MongoDB connected...'))
    .catch(err => console.error(err));



const server = Hapi.server({
    port: 3000,
    host: 'localhost'
});


const init = async () => {

    await server.start();
    console.log(`Server running at: ${server.info.uri}`);

    // Home Route
    server.route(routes);

    await server.register(require('vision'));

    server.views({
        engines: {
            html: require('handlebars')
        },
        relativeTo: __dirname,
        path: 'views',
        partialsPath: 'views/partials'
    });


};

process.on('unhandledRejection', (err) => {

    console.log(err);
    process.exit(1);
});

init();

如您所见,mongoose.connect正在工作,当我在终端中键入node app.js时,MongoDB connected...正在获得输出。

现在,我为该架构创建了一个models/Product.js,这就是该架构:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var ProductSchema = new Schema({
    name: String
});
module.exports = mongoose.model('Product', ProductSchema);

,现在位于我的路线product.js文件中。这是设置:

    const Product = require('../../model/Product')


module.exports = [
    {
        method: 'GET',
        path: '/product',
        handler: (request, h) => {
             //something is not working here
            Product.find(function(error, product) {
                if (error) {
                    console.error(error);
                }

                return h.view('product/product.html')
            })
        }
    }
]

现在我尝试去http://localhost:3000/product,但是当我去那里时,它说:

{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An internal server error occurred"
}

终端内部是这个Debug: internal, implementation, error Error: handler method did not return a value, a promise, or throw an error

我做了什么:

我去我的终端并输入mongoshow dbs,我发现hapidb数据库不在这里,所以我想也许是问题所在。 所以我去打了use hapidbdb.products.insert({name: "Television"})

我尝试重新启动node app.js并转到http://localhost:3000/product。仍然无法正常工作。

现在我尝试将路由处理程序略微更改为此

 handler: (request, h) => {
                //I added an empty object to find all product
        Product.find({}, function(error, product) {
            if (error) {
                console.error(error);
            }

            return h.view('product/product.html')
        })
    }

这就是我能想到的。如果我只返回return h.view('product/product.html'),它正在工作。但是在代码中使用Product.find时,它不起作用。

请帮助

1 个答案:

答案 0 :(得分:2)

尝试像这样返回Product.find:

handler: (request, h) => {
    return Product.find({}, function(error, product) { // <-- This line
        if (error) {
            console.error(error);
        }

        return h.view('product/product.html')
    })
}