【发布时间】:2019-04-02 22:54:18
【问题描述】:
我正在试验 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
我做了什么:
我去我的终端输入 mongo 和 show dbs ,我注意到 hapidb 数据库不在这里,所以我想这可能是问题所在。
所以我去输入use hapidb和db.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,它不起作用。
请帮忙
【问题讨论】:
-
如果您觉得回答对您有帮助,请接受。绿色复选标记为我加油 :)
标签: node.js mongodb mongoose hapi