猫鼬不适用于 hapi.js(简单设置)
Mongoose is not working with hapi.js(simple setup)
我正在试验 hapi.js 并想将 hapi 与 mongoose 连接起来。
但每当我去路线时,它都在说 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 return h.view('product/product.html')
它正在工作。但是代码中有 Product.find
,它不起作用。
请帮忙
尝试像这样返回 Product.find:
handler: (request, h) => {
return Product.find({}, function(error, product) { // <-- This line
if (error) {
console.error(error);
}
return h.view('product/product.html')
})
}
我正在试验 hapi.js 并想将 hapi 与 mongoose 连接起来。
但每当我去路线时,它都在说 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 return h.view('product/product.html')
它正在工作。但是代码中有 Product.find
,它不起作用。
请帮忙
尝试像这样返回 Product.find:
handler: (request, h) => {
return Product.find({}, function(error, product) { // <-- This line
if (error) {
console.error(error);
}
return h.view('product/product.html')
})
}