Javascript Express试图从错误的文件夹中提取资产
在我的express项目中,当我使用id呈现产品路线时,资产会尝试从公用文件夹中的/products加载(产品不存在),但当我从/franchino路线上稍微不同的模板呈现相同的html时,它会正确地从公用文件夹中提取资产 发生了什么事,我该怎么解决 不起作用的路线Javascript Express试图从错误的文件夹中提取资产,javascript,node.js,express,ejs,Javascript,Node.js,Express,Ejs,在我的express项目中,当我使用id呈现产品路线时,资产会尝试从公用文件夹中的/products加载(产品不存在),但当我从/franchino路线上稍微不同的模板呈现相同的html时,它会正确地从公用文件夹中提取资产 发生了什么事,我该怎么解决 不起作用的路线 router.get('/product/:slug', function(req, res) { //route params var slug = req.params.slug; var pro
router.get('/product/:slug', function(req, res) {
//route params
var slug = req.params.slug;
var productResp; //scope up api response to pass to render()
console.log(slug);
//api call
Prismic.api("https://prismic.io/api").then(function(api) {
return api.getByUID('product' , slug);
}).then(function(response) {
res.render('product-template', {
product: response,
})
}, function(err) {
console.log("Something went wrong: ", err);
});
});
错误:
GET /product/include/rs-plugin/js/extensions/revolution.extension.migration.min.js 404 0.843 ms - 1226
GET /product/include/rs-plugin/js/extensions/revolution.extension.parallax.min.js 404 1.069 ms - 1226
有效的路线:
router.get('/franchino', function(req, res) {
res.render('index-rest');
});
App.js
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
文件结构:
project
app.js
routes
index.js
views
snippets
snippets
all templates
public
css
includes
js
etc...
看起来只要有多层路线,即
/products/toys
默认资产提取行:app.use(express.static(path.join(uu dirname,'public'))代码>需要更改为app.use('/toys',express.static(uu dirname+'/public')代码>以反映路线
Per:在这里更改路由router.get('/api/product/:slug',function(req,res){
console.log(slug);
给你什么?Isconsole.log(“出错:,错误);
调用了吗?如果你调用console.log(响应)会发生什么;
?我不知道为什么会发生这种情况,但将。
放在所有导入的前面是有效的。它认为/products是一个公共文件夹。如果有人能解释原因,我会接受答案。我认为:slug
部分只允许匹配路径的单个组件。因此它将与一起工作http://www.example、 com/product/my slug
但不是http://www.example.com/product/include/my-slug
。但我无法解释为什么express.static
失败。您的文件系统图显示app.js
位于项目
目录中,因此\uu dirname
应该是项目
目录和路径.join(\uuuu dirname,'public')
应该是project/public
。如果你用\uuuu filename
而不是\uuuu dirname
,这是有意义的。但这是个谜。谢谢!这解决了它(至少对我来说)。但肯定还有其他解决方案。如果我有5个端点(/product/:option
,/service/:option
,/worker/:option
,/queue/:option
,/dabase/:option
)和5个资产文件夹(/crm
,/images
,/js
,/css)…然后我必须将其映射30次!!!应用程序。使用(express.static(/crm>/crm>/crm+))
app.use(express.static('product',express.static('dirname+/crm'));
app.use('product',express.static('dirname+/crm'));
app.use('product',express.static('dirname+/images'));
app.use('service',express.static('dirname+/crm'));/code>.use('。。。